我從HTTP
調用中獲得一些數據列表。然後我知道什麼值得到另一個HTTP
電話。我想讓所有內容都是異步的。但我需要使用這個數據與Expecto
'stestCaseAsync : string -> Async<unit> -> Test
。所以,我的目標是得到像這樣的簽名Async<Item>[]
F#使Async異步<Async<MyTpe> []>異步<MyType> []
所以,我想獲得一個列表testCaseAsync
。
所以,我基本上是這樣的:
// Async<Async<Item>[]>
let getAsyncCalls =
async {
let! table = API.getTable()
// Async<Item>[]
let items =
table.root
|> Array.map (fun x -> API.getItem x.id)
return item
}
如果我運行它們在並行獲得:
// Async<Item[]>
let getAsyncCalls =
async {
let! table = API.getTable()
// Item[]
let! items =
table.root
|> Array.map (fun x -> API.getItem x.id)
return item
}
所以,這並不讓我Async<Item>[]
。我不確定這是否可能。我想避免Async.RunSynchronously
爲API.getTable
調用,因爲這可能導致死鎖,對不對?它很可能會從一個緩存值(memoized
)中調用,所以我不確定這會有所作爲。
我想我會繼續努力,除非別人比我更聰明:-)提前致謝!