简而言之,C#3.0说异步方法和异步委托看起来很相似,但行为却截然不同.
这是本书所说的两者.
异步方法
- 很少或从不阻止任何线程.
- Begin方法可能不会立即返回给调用者.
- 一个没有C#语言支持的商定协议.
异步代理
- 可以阻止任何时间长度
- BeginInvoke立即返回给调用者.
- 内置编译器支持.
该书还说,异步方法的目的是允许许多任务在少数线程上运行; 异步委托的目的是与调用者并行执行任务.
当我通过反射器查看System.IO.Stream类中的BeginRead()方法时,它正在使用委托并在其上调用BeginInvoke.因此异步方法在内部使用异步委托.
- 在这种情况下,怎么能说他们的行为不同?既然它在内部使用委托,那么如何进行上述比较呢?
- 您是否认为使用委托的BeginXXX方法是与调用者并行执行函数的方法?
- 通过保持充分利用CPU等所有优点来实现异步方法的正确方法是什么?
有什么想法吗?