Asynchronous F#是否有Async.Sequential来匹配Async.Parallel?
F#hasAsynchronous F#是否有Async.Sequential来匹配Async.Parallel?,asynchronous,f#,Asynchronous,F#,F#hasAsync.Parallel带有类型签名seq,它将获取一系列异步类型,准备并行运行,并输出单个异步 我想知道是否有一个类似的Async.Sequential,它具有相同的类型签名,但按顺序一个接一个地运行每个项目?我觉得我肯定错过了什么明显的东西 我想做如下事情: async { let! results = myItems |> List.map myAsynchronousOperation |> Async.S
Async.Parallel
带有类型签名seq
,它将获取一系列异步类型,准备并行运行,并输出单个异步
我想知道是否有一个类似的Async.Sequential
,它具有相同的类型签名,但按顺序一个接一个地运行每个项目?我觉得我肯定错过了什么明显的东西
我想做如下事情:
async {
let! results =
myItems
|> List.map myAsynchronousOperation
|> Async.Sequential
... do something with results
}
我不认为有一个内置的,但写自己的应该很简单:
let sequential s = async {
let results = ResizeArray()
for a in s do
let! result = a
results.Add(result)
return List.ofSeq results
}
评估
seq中的项目如果愿意使用该库,那么下面将执行给定示例中所需的操作:
async {
let! results =
myItems
|> AsyncSeq.ofSeq
|> AsyncSeq.mapAsync myAsynchronousOperation
|> AsyncSeq.toListAsync
... do something with results
}
如果您还没有在其他方面使用AsyncSeq,可能会有点过头。随着F#4.7和FSharp的发布,Core 4.7Async.Sequential现在“开箱即用”可用
公告:
来源:我是AsyncSeq
的忠实粉丝,这就是我在现实世界中处理这种情况的方式。
async {
let! results =
myItems
|> AsyncSeq.ofSeq
|> AsyncSeq.mapAsync myAsynchronousOperation
|> AsyncSeq.toListAsync
... do something with results
}