Asynchronous 优化F中映射异步序列的语法#
我试图找出以下F#表达式的有效语法。假设我有一个F#异步计算:Asynchronous 优化F中映射异步序列的语法#,asynchronous,f#,sequence,Asynchronous,F#,Sequence,我试图找出以下F#表达式的有效语法。假设我有一个F#异步计算: let asyncComp n = async { return n } 它有一个签名'a->Async,您可以使用Async.map(我现在才公开提到): 如果你对它进行评估,你会发现它似乎产生了预期的结果: > seqOfAsyncSquares' |> Async.Parallel |> Async.RunSynchronously;; val it : int [] = [|1; 4; 9|] 谢谢,马
let asyncComp n = async { return n }
它有一个签名
'a->Async,您可以使用Async.map
(我现在才公开提到):
如果你对它进行评估,你会发现它似乎产生了预期的结果:
> seqOfAsyncSquares' |> Async.Parallel |> Async.RunSynchronously;;
val it : int [] = [|1; 4; 9|]
谢谢,马克,那很酷。当然,我可以将异步管道移动到单独的函数中。顺便说一句,你提到的帖子带来了一个有趣的讨论和很好的例子。这正是我现在需要的。我一直在想为什么Async.map
不是内置的,但我只是看了一下。下面是示例。如果你想要这个功能,就去投票吧。提交一份公关怎么样:)?
let seqOfAsyncSquares =
seqOfAsyncComps |> Seq.map (fun x -> x * x) // ERROR!!!
let seqOfAsyncSquares =
seqOfAsyncComps |> Seq.map (fun x -> async {
let! y = x
return y * y }) // OK
module Async =
let map f workflow = async {
let! res = workflow
return f res }
let seqOfAsyncSquares' =
seqOfAsyncComps |> Seq.map (Async.map (fun x -> x * x))
> seqOfAsyncSquares' |> Async.Parallel |> Async.RunSynchronously;;
val it : int [] = [|1; 4; 9|]