asynchronous - F#如何运行几个异步任务并等待第一个完成的结果?

标签 asynchronous f#

有很多示例如何在f#中执行异步任务,例如

[dowork 1; work 2]
|> Async.Parallel
|> Async.RunSynchronously

但是,如何异步地仅等待第一个结果呢?

例如,如果我想运行一些并行查找任务,并且想在获得第一个成功结果时进行更深入的搜索。 (基本上相当于C#世界中的Task.WhenAny ...)

最佳答案

我会用类似的东西:

let any asyncs =
    async {
        let t = 
            asyncs
            |> Seq.map Async.StartAsTask
            |> System.Threading.Tasks.Task.WhenAny
        return t.Result.Result }

关于asynchronous - F#如何运行几个异步任务并等待第一个完成的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517216/

相关文章:

ios - swift alamofire 异步请求 json

javascript - 如何从异步调用返回响应?

c# - 为什么异步单任务比普通单任务运行得更快?

asynchronous - Fsharpx Async.AwaitObservable 不调用取消继续

c# - 如何在保持其语法的同时使此函数式代码的性能更高

php - 我可以在插入数据库值后立即使用它吗?

linq-to-sql - 如何优化统计计数顺序以及为何如此缓慢

.net - F# TypeProvider 无法加载类型

f# - f# 中的神秘类型检查错误(当出现 ?12345 :> ISomething) 时丢失

c# - 异步初始化及其单元测试