我发现[...]Async 和 Begin[...] .net 异步 API 之间的区别问题,但这个答案让我有点困惑。
谈到这些模式,斯蒂芬说:
大多数 *Async 方法(具有相应的 *Completed 事件)都使用基于事件的异步模式。较旧的(但仍然完全有效)Begin* 和 End* 是一种称为异步编程模型的模式。
Socket 类是这个规则的一个例外;它的 *Async 方法没有任何对应的事件;它本质上只是为了避免过多的内存分配而完成的 APM。
我认为使用 *Async 方法效率更高,至少在套接字方面是这样。但随后他提到了任务并行库:
但是,APM 和 EBAP 都被基于任务并行库的更灵活的方法所取代。由于 TPL 可以轻松地包装 APM,旧的类可能不会直接更新;扩展方法用于为旧的 APM 方法提供等效的任务。
我在 MSDN 上找到了TPL 和传统 .NET 异步编程,我知道 TPL 的基础知识,创建任务、取消、继续等,但我仍然无法理解这些:
异步编程模型 (APM) 和基于事件的异步模式 (EAP) 相比有哪些优势?TPL如何轻松包装APM 意味着 APM 和 EAP 都将被TPL 取代?
最重要的是:我应该在套接字编程中使用哪个;
- APM?
- 亚太区?
- 任务包装的 APM 或 EAP?
- TPL 通过在任务中使用 Socket 类的阻塞方法?
- 其他?