在阅读必要的C# 4.0时,我得到了这个关于ADI的评论:
不幸的是,异步委托调用模式所使用的底层技术是一种被称为远程处理( remoting )的分布式编程的最终开发技术。而且,尽管微软仍然支持异步委托调用的使用,而且在可预见的将来它将继续像现在一样工作,但是考虑到其他方法,即线程、ThreadPool和TPL,性能特性是次优的。因此,开发人员应该倾向于使用这些替代方案之一,而不是使用异步委托调用API实现新的开发。下面的高级主题文本中包含了对模式的进一步讨论,以便遇到它的开发人员能够理解它是如何工作的。
那么,除了TPL可能使用不断发展的技术之外,ADI和TPL还有什么限制吗?
发布于 2011-04-06 20:48:12
任务和异步委托都使用线程池。
任务和异步委托在某种意义上类似于异常可以传播给调用方。任务更进一步,积累所有抛出的异常并为所有线程池工作人员提供它们。
任务允许取消。
有一个免费章节更详细地描述了这一切:http://www.albahari.com/threading/
发布于 2010-09-18 09:56:02
你要求“限制”。
我认为您不会发现任何不能用ADI (也称为APM)做的事情。关键是性能和程序员的努力。
这一裁决似乎是一致的,来自ADI/APM的乔·达菲也警告你离开
结论很简单,如果可以的话,可以使用TPL。它既简单又高效。现在正处于进一步发展的起点。
发布于 2011-03-09 23:04:10
不是说我是第三方物流的专家。据我所知,TPL将并行级别上的决策抽象为配置/规范。
例如,在并行For循环中。
Parallel.For(10000,1000,a => Thread.Sleep(10000));
你不一定会产生1000个线程。TPL将“并行”到适当数量的线程。而不是异步调用方法1000次。(这也不会创建1000个线程,但在释放所需的资源之前,只会阻塞执行调用。
此外,TPL还允许您对并行任务进行更高级别的控制。在上面的例子中,您可以很容易地暂停/中断/中止for循环。比如。
Parrallel.For(0,1000,(a,loopState) => loopState.Break());
使用传统的异步方法调用来实现上述功能有点麻烦。
TL,DR: TPL更高效,更易于使用。
https://stackoverflow.com/questions/3740603
复制相似问题