如何拆箱 Async<string> []
How to unbox Async<string> []
所以我有一个 Async<string> []
,但我一直都不知道如何打开它!
我从
开始
Job<Result<string>> []
然后我设法做到了
Job<string> []
所以我添加了 Job.toAsync
认为将其转换为异步可能更容易退出。不
现在我有
Async<string> []
我正在使用 Hopac
库
所以我的问题是,我怎样才能得到 string []
你需要以某种方式 运行 那些异步,以便每个 returns 你一个值。最简单的方法是并行 运行 它们,因为它有一个内置函数 - Async.Parallel
。此函数采用一系列异步和 returns 数组的异步,然后您可以 运行 与 Async.RunSynchronously
或类似的:
let asyncs : Async<string> [] = ...
let results = asyncs |> Async.Parallel |> Async.RunSynchronously
或者,如果您希望它们按顺序 运行,您可以一个接一个 运行,并边走边累加结果。不幸的是,没有内置函数可以执行此操作,因此您必须自己编写代码。像这样:
let runEm asyncs =
let loop rest resultsSoFar =
match rest with
| x::xs ->
async {
let! r = x
return! loop xs (r:resultsSoFar)
}
| [] ->
async { return resultsSoFar }
async {
let! ress = loop asyncs []
return ress |> List.reverse
}
// Usage:
let asyncs : Async<string> [] = ...
let results = runEm asyncs |> Async.RunSynchronously
所以我有一个 Async<string> []
,但我一直都不知道如何打开它!
我从
开始Job<Result<string>> []
然后我设法做到了
Job<string> []
所以我添加了 Job.toAsync
认为将其转换为异步可能更容易退出。不
现在我有
Async<string> []
我正在使用 Hopac
库
所以我的问题是,我怎样才能得到 string []
你需要以某种方式 运行 那些异步,以便每个 returns 你一个值。最简单的方法是并行 运行 它们,因为它有一个内置函数 - Async.Parallel
。此函数采用一系列异步和 returns 数组的异步,然后您可以 运行 与 Async.RunSynchronously
或类似的:
let asyncs : Async<string> [] = ...
let results = asyncs |> Async.Parallel |> Async.RunSynchronously
或者,如果您希望它们按顺序 运行,您可以一个接一个 运行,并边走边累加结果。不幸的是,没有内置函数可以执行此操作,因此您必须自己编写代码。像这样:
let runEm asyncs =
let loop rest resultsSoFar =
match rest with
| x::xs ->
async {
let! r = x
return! loop xs (r:resultsSoFar)
}
| [] ->
async { return resultsSoFar }
async {
let! ress = loop asyncs []
return ress |> List.reverse
}
// Usage:
let asyncs : Async<string> [] = ...
let results = runEm asyncs |> Async.RunSynchronously