我已閱讀這篇文章: https ://www.compositional-it.com/news-blog/task-vs-async/ ,其中涵蓋了 F# 6 中的更新。
有一章介紹了任務運算式及其與async的異同。
我的理解是,任務是一個塊,我們可以在其中進行異步呼叫,但它是在常規流程中執行的,而異步塊是我們所知道的,它創建稍后將按需執行的運算式。
我非常廣泛地使用異步,因為我正在使用一個執行大量資料流和資料庫寫入的應用程式,所以一切都是異步的。
我可以看到任務運算式的唯一用途是與我希望異步塊立即運行的異步 api 介面。本質上,替換:
async {
do! callMyAsyncOnlyApi ()
} |> Async.RunSynchronously
和
task {
do! callMyAsyncOnlyApi ()
}
它將立即運行并在等待時釋放 cpu。
我一定是錯過了什么:D
uj5u.com熱心網友回復:
這篇文章在結論部分提供了一個很好的總結:
就個人而言,我默認使用 async {},除非我正在處理基于外部任務的庫或者我面臨特定的性能問題(尚未發生!)。我發現它更適合功能性思維方式并且更易于使用。
然而現實情況是,很多庫都是在考慮到 Task 的情況下撰寫的,而且 F# 現在擁有一流的、開箱即用的模式支持,這真是太棒了。
我認為沒有太多要補充的:
- F# 始終具有
async并且async是合理的默認值 - 有許多優點
async- 它支持取消并使用更可組合(并且更 F# 友好)的“生成器”模型 - .NET 的使用
Task<T>更為突出,因此如果您要與許多 .NET 庫互動(正如您的問題所暗示的那樣),那么您可以選擇task task如果您的代碼受 CPU 限制而非 IO 限制,則效率會更高 - 因此在某些情況下,您可能會出于性能原因選擇它
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/414258.html
標籤:
