Asynchronous F#异步等效于Promise.race?

Asynchronous F#异步等效于Promise.race?,asynchronous,f#,Asynchronous,F#,在JavaScript中,有一个名为Promise.race的函数,它获取承诺列表并返回一个新的承诺,该承诺在任何输入承诺完成时完成 见: F#hasAsync.Parallel,它在所有输入异步完成时完成,但它似乎没有任何等价物(例如Async.Race) 我如何用F#写这个?你可以使用任务 大概是这样的: let race xs = xs |> Seq.map Async.StartAsTask |> Task.WhenAny |> Async.Awai

在JavaScript中,有一个名为
Promise.race
的函数,它获取承诺列表并返回一个新的承诺,该承诺在任何输入承诺完成时完成

见:

F#has
Async.Parallel
,它在所有输入异步完成时完成,但它似乎没有任何等价物(例如
Async.Race

我如何用F#写这个?

你可以使用任务

大概是这样的:

let race xs = 
  xs 
  |> Seq.map Async.StartAsTask
  |> Task.WhenAny
  |> Async.AwaitTask

使用
FSharp.Control
中的
Async.Choice

let race xs=
异步的{
让我们先
xs
|>Seq.map(有趣的任务->异步{
设!x=任务
还一些x
})
|>异步选择
返回选项。先获取
}

您可能可以使用,其中每个异步在成功时调用相同的继续,并且在第一次调用时取消异步。许多实际问题都需要解决,比如continuation函数将采用的类型(某种DU),以及文档称异步将“立即在当前操作系统线程上”启动的事实。有趣的是,
async
没有这种能力<代码>任务。当BCL中的任何出现这种行为时,如果您愿意选择基于任务的路线。