2010-09-18 141 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