异步委托和异步方法有什么区别?

7

异步委托和异步方法有什么区别?

有人告诉我在C#中它们是不同的,但我认为它们是一样的。


可能是异步方法和异步委托的重复问题。 - Oliver
2个回答

6
首先是委托。当您声明一个委托时,编译器会自动为该委托类型生成三个方法:
- Invoke(...),参数与委托声明相同 - BeginInvoke(...,AsyncCallback,object),其中...是已声明的参数 - EndInvoke(IAsyncResult)
Invoke() 方法同步调用委托目标,就像普通调用一样。BeginInvoke() 方法是异步调用,目标方法在线程池线程上运行。在方法完成后,需要调用 EndInvoke() 以释放为调用分配的资源并重新引发可能中止调用的任何异常。
.NET 框架包含许多具有 BeginXxxx() 方法的类。MSDN Library 将它们称为“异步操作”,而不是异步方法。它们启动一个异步完成的操作。
从 .NET 4.5 开始,并受 C# 版本 5 支持,以 Async 结尾且返回一个 Task 的异步操作可以在 await 表达式中调用。当在具有 async 修饰符的方法中使用时,这极大地简化了处理异步操作,在 WinRT 中非常重要,因为许多常见操作都是异步的。

5
在C# 5中(Visual Studio Dev11预览版),这种情况不再成立。 C#确实对“async”方法提供了适当的支持。 - Andrew Arnott

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接