【发布时间】:2010-11-27 22:50:07
【问题描述】:
C# 3.0 简而言之 说 异步方法 和 异步委托 看起来很相似,但行为却大不相同.
这本书是这么说的。
异步方法
- 很少或从不阻塞任何线程。
- Begin 方法可能不会立即返回给调用者。
- 不支持 C# 语言的商定协议。
异步委托
- 可能会阻塞任意时间
- BeginInvoke 立即返回给调用者。
- 内置编译器支持。
书上还说,异步方法的目的是让很多任务在少数线程上运行;异步委托的目的是与调用者并行执行任务。
当我通过反射器查看 System.IO.Stream 类中的 BeginRead() 方法时,它正在使用委托并调用 BeginInvoke 关于那个。因此,异步方法在内部使用异步委托。
- 在这种情况下,怎么能说他们的行为不同呢?既然它在内部使用了委托,那么像上面这样的比较怎么可能呢?
- 您认为使用委托的 BeginXXX 方法是与调用者并行执行函数的方法吗?
- 通过保持所有优势(如充分利用 CPU)来实现异步方法的正确方法是什么?
有什么想法吗?
【问题讨论】:
-
codezone4 有很好的教程。点击here!
标签: c# .net multithreading asynchronous