net异步操作总结和比较
以下是个人理解:
Compute 主要指的是CPU密集型或者是其他计算密集型的操作
I/O 这里指的是操作文件或者网络等适用的异步情况
父子依赖指的是 一个任务是不是依赖于其他任务的状态而执行(例如A任务完成取消或者异常的时候 B任务执行)
取消: 一个任务开始以后是否能够被终止
等待:能否block住当前线程以等待异步操作的完成(是否有内置功能支持)
超时:能否对异步任务设置超时时间
返回值和异常:能否处理异步任务的返回值和异常(是否有内置功能支持)
异步方式 |
主要应用 |
Emulate Secondary via What?
|
父子依赖关系 |
进度报告 |
取消 |
等待 |
超时 |
返回值和异常 |
QueueUserWorkItem |
Compute |
Sync I/O |
NO |
NO |
NO |
NO |
NO |
NO |
Timer |
Compute |
Sync I/O |
NO |
NO |
Dispose 方法 |
NO |
YES |
NO |
RegisterWaitForSingleObject |
Compute |
Sync I/O |
NO |
NO |
注销事件 |
NO |
YES |
NO |
Tasks |
Compute |
Sync I/O TaskComletionSource
Task.Scheduler的 FromAsync |
YES |
NO |
应用于Compute的时候要早于Task启动或者Task支持取消方法 应用于I/O:丢弃结果 |
YES |
YES |
YES |
IAsyncResult |
I/O |
Delegate.BeginInvoke |
NO |
NO |
NO |
YES |
NO |
YES |
Event-Base |
I/O |
BackgroundWorker |
NO |
SOME |
有些类型支持丢弃结果 |
NO |
NO |
YES |
AsyncEnumerator |
I/O |
Delegate.BeginInvoke |
NO |
NO |
YES |
NO |
YES |
YES |