异步委托和异步方法之间有什么不同?

时间:2010-05-19 09:36:18

标签: c#

异步委托和异步方法之间有什么不同?

有人告诉我他们在C#方面有所不同,但我认为他们是同一回事。

2 个答案:

答案 0 :(得分:6)

先代表。声明一个时,编译器会自动为委托类型生成三种方法:

  • 调用(...),使用与委托声明相同的参数
  • BeginInvoke(...,AsyncCallback,object)其中......是声明的参数
  • 的EndInvoke(IAsyncResult的)

Invoke()方法同步调用委托目标,就像普通调用一样。 BeginInvoke()方法是异步调用,目标方法在线程池线程上运行。方法完成后,需要EndInvoke()调用以释放为调用分配的资源,并重新引发可能已中止调用的任何异常。

.NET框架包含许多具有BeginXxxx()方法的类。 MSDN Library将它们称为异步操作,而不是异步方法。它们启动异步完成的操作。

从.NET 4.5开始并受C#版本5支持,名称以Async结尾并返回Task的异步操作可以在 await 表达式中调用。在具有 async 修饰符的方法中使用时。这极大地简化了异步操作的处理,这在WinRT中很重要,其中许多常见操作是异步的。

答案 1 :(得分:0)

对于差异以及进一步的讨论,请参阅此处的Asynchronous methods and asynchronous delegates