2010-09-18 57 views
2

我得到這個評論對ADI在閱讀基本C#4.0:異步委託調用(ADI)與任務並行庫(TPL)

不幸的是,由異步 委託調用模式使用的基本 技術一個 末端進一步開發技術 分佈式編程稱爲 遠程處理。儘管微軟仍然 支持使用異步 委託調用的,它會 繼續發揮作用,因爲它今天 不會在可預見的未來, 性能特點是 次優考慮到其他 方法,即線程,線程池, 和TPL 。因此,開發者應該傾向於使用這些 替代方案中的一個,而不是使用異步 委託調用API來實施 新開發。進一步 該模式的討論包括 在高級主題文本 跟隨,以便開發人員遇到它將瞭解它如何 工作。

那麼是否有任何ADI有限制和TPL沒有的限制,除了TPL可能使用了還沒有進一步開發的技術?

回答

2

你問「限制」。

我不認爲你會發現任何無法用ADI(也稱爲APM)完成的事情。關鍵是性能和程序員的努力。

判決似乎是一致的,從ADI/APM

Joe Duffy also warns you away,結論很容易,如果你可以使用TPL。它簡單而高效。它正處於剛剛開始的進一步發展的階段。

2

不是我是TPL的專家。從我所瞭解的TPL中抽象出作爲配置/規範的並行性級別的決定。

例如,在並行for循環中。 Parallel.For(0,1000,a => Thread.Sleep(10000));

你不一定會產生1000個線程。 TPL將「並行」到適當數量的線程。而不是異步調用1000次方法。 (它不會創建1000個線程,但是你只會在被釋放之前阻塞執行調用)

此外,TPL允許您對並行任務進行更高級別的控制。可以暫停/休息/中止for循環容易如

Parrallel.For(0,1000,(一個,loopState)=> loopState.Break());

這有點麻煩到的使用傳統的異步方法調用實現以上功能

TL,DR:TPL更高效且更易於使用。

3

任務和異步委託都使用線程池。

任務和異步委託在異常可以傳播給調用者的意義上是相似的。任務更進一步,累積所有拋出的異常並將它們一起呈現給所有線程池工作人員。

任務允許取消。

有一個描述這一切的更詳細的自由章:從UI http://www.albahari.com/threading/

+0

後臺處理是常見的問題,異步委託加以解決。多核上的並行計算是任務試圖解決的問題。 – GregC 2011-04-06 20:52:15