Asynchronous F#异步等效于Promise.race?
在JavaScript中,有一个名为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
Promise.race
的函数,它获取承诺列表并返回一个新的承诺,该承诺在任何输入承诺完成时完成
见:
F#hasAsync.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中的任何出现这种行为时,如果您愿意选择基于任务的路线。