Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous F#是否有Async.Sequential来匹配Async.Parallel?_Asynchronous_F# - Fatal编程技术网

Asynchronous F#是否有Async.Sequential来匹配Async.Parallel?

Asynchronous F#是否有Async.Sequential来匹配Async.Parallel?,asynchronous,f#,Asynchronous,F#,F#hasAsync.Parallel带有类型签名seq,它将获取一系列异步类型,准备并行运行,并输出单个异步 我想知道是否有一个类似的Async.Sequential,它具有相同的类型签名,但按顺序一个接一个地运行每个项目?我觉得我肯定错过了什么明显的东西 我想做如下事情: async { let! results = myItems |> List.map myAsynchronousOperation |> Async.S

F#has
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.7
Async.Sequential现在“开箱即用”可用

公告:


来源:

我是
AsyncSeq
的忠实粉丝,这就是我在现实世界中处理这种情况的方式。
async {
    let! results =
        myItems
        |> AsyncSeq.ofSeq
        |> AsyncSeq.mapAsync myAsynchronousOperation
        |> AsyncSeq.toListAsync

    ... do something with results
}