[英]When calling an F# async workflow, can I avoid defining a temporary label?
假設我有一個異步數據源:
let getData() = async { return [ 3.14; 2.72 ] }
我可以用let!
來稱呼它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
調用線程。
是否在某個地方定義了語法,運算符或函數,使我可以將Async<'T>
傳遞給接受'T
的函數?
聽起來您想為Async
map
:
let mapAsync f a = async {
let! v = a
return (f v)
}
那么您可以執行以下操作:
let m: Async<unit> = getData() |> mapAsync (Seq.iter (printfn "%A"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.