2010-06-20 83 views

回答

15

注意,大多數方法*Async(相應*Completed事件)所使用的Event-Based Asynchronous Pattern。較舊的(但仍是完全有效的)Begin*End*是一種稱爲Asynchronous Programming Model的模式。 Socket類是此規則的例外;其*Async方法沒有任何相應的事件;它基本上只是以避免過多的內存分配的方式完成的APM。

APM和EBAP最大的區別是用於完成通知的線程。 APM將回調一個線程池線程(除非請求同步完成)。 EBAP將使用跨框架策略在UI線程上回調(如果該操作是從UI線程開始的)。

但是,基於Task Parallel Library,APM和EBAP正在被更爲靈活的方法取代。由於TPL可以輕鬆包裝APM,因此舊版的課程可能不會直接更新;擴展方法用於爲舊的APM方法提供等效的Task

更新2012-07-14:我錯了,當我說「老班可能不會直接更新」。出於性能原因,BCL/TPL團隊決定檢查每個BCL類型並直接添加TAP方法,而不是使用擴展方法。這些更改將在.NET 4.5中進行。