C# 3.0 in a nutshell指出,异步方法和异步委托看起来很相似,但行为上却非常不同。
以下是该书对两者的介绍:
异步方法
- 很少或不会阻塞任何线程。
- Begin方法可能不会立即返回给调用者。
- 使用一种约定的协议,没有C#语言支持。
异步委托
- 可能会阻塞任意长度的时间。
- BeginInvoke方法立即返回给调用者。
- 内置的编译器支持。
该书还说:异步方法的目的是允许多个任务在少量线程上运行;异步委托的目的是与调用者并行执行任务。
当我通过反射查看System.IO.Stream类中的BeginRead()方法时,它使用了一个委托,并在其上调用了BeginInvoke。因此,异步方法在内部使用异步委托。
- 在这种情况下,如何说它们的行为不同?由于它在内部使用委托,因此像上面的比较是如何进行的?
- 您认为使用委托的BeginXXX方法是以与调用者并行执行函数的方式工作的正确方法吗?
- 实现异步方法的适当方法是什么,同时保持所有优点,例如充分利用CPU?
有什么想法吗?