首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步方法和异步委托

异步方法和异步委托
EN

Stack Overflow用户
提问于 2009-09-13 17:55:56
回答 1查看 4.6K关注 0票数 11

简单地说,C# 3.0,说异步方法和异步委托看起来很相似,但是行为非常不同。

以下是这本书对两者的看法。

异步方法

  1. 很少或从不阻止任何线程。
  2. Begin方法可能不会立即返回给调用方。
  3. 是一种没有C#语言支持的协议。

异步委托

对于任意长度的time

  • BeginInvoke,
  1. 可以阻塞,立即返回到caller.
  2. Built-in编译器支持。

书中还说,异步方法的目的是允许多个任务在几个线程上运行;异步委托的目的是与调用者并行执行任务。

当我通过反射器查看System.IO.Stream类中的System.IO.Stream()方法时,它使用的是委托并对此调用BeginInvoke。因此,异步方法在内部使用异步委托。

  1. 在这种情况下,怎么能说他们的行为是不同的呢?由于它在内部使用委托,所以如何能够进行上述比较?
  2. 您认为使用委托的BeginXXX方法是执行函数与调用者并行的方法吗?
  3. 通过维护诸如充分利用CPU?

等所有优点来实现异步方法的正确方法是什么?

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2009-09-13 18:00:39

实现可能是不同的;例如,异步IO调用可以选择使用完成端口,以便在不执行任何操作的情况下将对系统的成本降到最低。

我认为这本书试图强调的是,代表们总是包括这样的模式:

  • 是一个同步调用(Invoke),它可以阻止异步调用(BeginInvoke),除非线程池是饱和的

,否则不应该真正阻塞异步调用(BeginInvoke)。

但这并不是唯一的模式。此外,最近(例如,Silverlight或WebClient中的异步IO方法):而不是使用IAsyncResult,而是使用事件来表示完成。

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

https://stackoverflow.com/questions/1418392

复制
相关文章

相似问题

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