2

假设我有一个异步数据源:

let getData() = async { return [ 3.14; 2.72 ] }

我可以使用let!一个临时标签来调用它:

let showData1() = async {
    let! data = getData()
    data
    |> Seq.iter (printfn "%A")
}

或者,我可以使用和管道调用它(效率低下!)Async.RunSynchronously,并且没有临时标签:

let showData2() = async {
    getData()
    |> Async.RunSynchronously
    |> Seq.iter (printfn "%A")
}

我喜欢的语法,showData2但知道调用会Async.RunSynchronously占用调用线程。

是否在某处定义了语法、运算符或函数,允许我将 an 传递Async<'T>到接受的函数中'T

4

1 回答 1

5

听起来你想要mapAsync

let mapAsync f a = async { 
    let! v = a
    return (f v)
}

那么你可以这样做:

let m: Async<unit> = getData() |> mapAsync (Seq.iter (printfn "%A"))
于 2015-05-23T19:42:45.397 回答