HTTP
我从一个电话中得到了一些数据列表。HTTP
然后我知道另一个电话要获得什么价值。我想让一切都是异步的。但我需要将此数据与Expecto
's testCaseAsync : string -> Async<unit> -> Test
一起使用。所以,我的目标是得到这样的签名Async<Item>[]
所以,我想得到一个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
) 中调用,所以我不确定这会有所作为。
我想我会继续努力,除非其他人比我更聪明:-) 在此先感谢!