首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步代理调用(ADI)与任务并行库(TPL)

异步代理调用(ADI)与任务并行库(TPL)
EN

Stack Overflow用户
提问于 2010-09-18 06:16:41
回答 3查看 1.7K关注 0票数 2

在阅读必要的C# 4.0时,我得到了这个关于ADI的评论:

不幸的是,异步委托调用模式所使用的底层技术是一种被称为远程处理( remoting )的分布式编程的最终开发技术。而且,尽管微软仍然支持异步委托调用的使用,而且在可预见的将来它将继续像现在一样工作,但是考虑到其他方法,即线程、ThreadPool和TPL,性能特性是次优的。因此,开发人员应该倾向于使用这些替代方案之一,而不是使用异步委托调用API实现新的开发。下面的高级主题文本中包含了对模式的进一步讨论,以便遇到它的开发人员能够理解它是如何工作的。

那么,除了TPL可能使用不断发展的技术之外,ADI和TPL还有什么限制吗?

EN

回答 3

Stack Overflow用户

发布于 2011-04-06 20:48:12

任务和异步委托都使用线程池。

任务和异步委托在某种意义上类似于异常可以传播给调用方。任务更进一步,积累所有抛出的异常并为所有线程池工作人员提供它们。

任务允许取消。

有一个免费章节更详细地描述了这一切:http://www.albahari.com/threading/

票数 2
EN

Stack Overflow用户

发布于 2010-09-18 09:56:02

你要求“限制”。

我认为您不会发现任何不能用ADI (也称为APM)做的事情。关键是性能和程序员的努力。

这一裁决似乎是一致的,来自ADI/APM的乔·达菲也警告你离开

结论很简单,如果可以的话,可以使用TPL。它既简单又高效。现在正处于进一步发展的起点。

票数 1
EN

Stack Overflow用户

发布于 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更高效,更易于使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3740603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档