首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步委托操作澄清?

异步委托操作澄清?
EN

Stack Overflow用户
提问于 2013-03-12 08:06:16
回答 2查看 161关注 0票数 2

我正在读汉斯的“https://stackoverflow.com/questions/3172773/net-threadpool-worker-threads-and-asynchronous-io-threads”和“答案”,但我仍然需要澄清。

AFAIK,

异步方法的目的是允许多个任务在少数线程上运行;而异步委托的目的是与调用方并行执行任务。

但是对于这两个异步操作:

如果BeginInvoke立即返回给调用者(并且它使用异步委托),那么必须有其他线程在它完成时实际执行任务和信号。

那么,将该线程用于常规线程池线程有什么区别呢?我的回答是:只有那些线程池线程已经存在并等待运行了吗?

但是,当BeginInvoke立即运行并返回时,其他人实际上已经完成了肮脏的工作(代码必须在进程中的线程下运行),这一事实又如何呢?因此,必须在某个地方创建一个线程(在beginXXX调用之后运行)

我遗漏了什么?

EN

Stack Overflow用户

回答已采纳

发布于 2013-03-12 08:20:11

Delegate.BeginInvoke使用线程池线程,就像QueueUserWorkItem一样。不同之处在于它实现了APM模式,它允许调用方使用WaitHandle等待调用完成,并提供回调。

在许多地方都可以找到开始/结束方法对(AKA,异步编程模型),当调用'begin‘时,完全由实现者来决定发生了什么。在许多情况下,使用IO完成端口,这是等待IO完成的一种非常有效的方法。当IO完成时,一个线程池线程被用来执行回调,但是它是从线程池的另一个部分获取的(这就是Set{Min,Max}线程有两个数字的原因。)

另外,在.NET 4.5 (甚至4.0)中,使用异步任务要容易得多。许多类都使用了像'XXXTaskAsyc‘这样的方法来增强,后者返回一个Task对象。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15356074

复制
相关文章

相似问题

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