[英]Is asynchronous in C# the same implementation as in F#?
C#4.5中的異步實現與線程使用方式中的F#2完全相同嗎?
它們是不同的。 主要區別在於C#使用標准.NET Task<T>
來表示異步計算,而F#使用自己的類型Async<T>
。
更具體地說,關鍵的區別是:
AC#async方法創建一個立即啟動的Task<T>
( 熱任務模型),而F#創建一個必須明確啟動的計算( 生成器模型)。 這意味着F#計算更容易編寫(您可以編寫更高級別的抽象)。
在F#中,您還可以更好地控制計算的開始方式。 您可以使用開始計算Async.Start
啟動它在后台或Async.StartImmediate
啟動它在當前線程上。
F#異步工作流程支持自動取消 ,因此您不必通過CancellationToken
。
第一點的另一個結果可能是F#異步工作流也支持尾遞歸,因此您可以編寫遞歸工作流(這在C#中不起作用,但C#不使用此編程樣式)
我寫了一篇關於這個主題的更詳細的文章: 異步C#和F#(II。):它們有什么不同?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.