簡體   English   中英

在調用F#異步工作流程時,是否可以避免定義臨時標簽?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM