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中映射异步序列的语法#_Asynchronous_F#_Sequence - Fatal编程技术网

Asynchronous 优化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|] 谢谢,马

我试图找出以下F#表达式的有效语法。假设我有一个F#异步计算:

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|]