我发现了这篇关于异步API的问题:Difference between […]Async and Begin[…] .net asynchronous APIs,但是这个回答让我有点困惑。
在谈到这些模式时,Stephen说:
大多数*Async方法(带有相应的*Completed事件)使用基于事件的异步模式。旧的(但仍然完全有效的)Begin *和End *是一种称为异步编程模型的模式。
Socket类是一个例外;其*Async方法没有任何对应的事件;它本质上只是APM的一种方式,以避免过多的内存分配。
我理解为使用*Async方法更有效率,至少在涉及sockets时如此。 但是他之后提到了Task Parallel Library:
然而,APM和EBAP都将被一种基于Task Parallel Library的更加灵活的方法所取代。由于TPL可以轻松包装APMs,旧类可能不会直接更新;扩展方法用于为旧的APM方法提供Task等效项。
我在MSDN上找到了TPL and Traditional .NET Asynchronous Programming,我了解TPL的基础知识,如创建任务、取消、连续性等,但我仍然无法理解这些问题:
相比之下,异步编程模型(APM)和基于事件的异步模式(EAP)各有什么优势?TPL如何轻松地包装APM意味着APM和EAP都被TPL取代了?
最重要的是:在socket编程中应该使用哪种方法;
1. APM? 2. EAP? 3. 通过Task包装的APM或EAP? 4. 使用Socket类的阻塞方法在任务中使用TPL? 5. 其他?
在谈到这些模式时,Stephen说:
大多数*Async方法(带有相应的*Completed事件)使用基于事件的异步模式。旧的(但仍然完全有效的)Begin *和End *是一种称为异步编程模型的模式。
Socket类是一个例外;其*Async方法没有任何对应的事件;它本质上只是APM的一种方式,以避免过多的内存分配。
我理解为使用*Async方法更有效率,至少在涉及sockets时如此。 但是他之后提到了Task Parallel Library:
然而,APM和EBAP都将被一种基于Task Parallel Library的更加灵活的方法所取代。由于TPL可以轻松包装APMs,旧类可能不会直接更新;扩展方法用于为旧的APM方法提供Task等效项。
我在MSDN上找到了TPL and Traditional .NET Asynchronous Programming,我了解TPL的基础知识,如创建任务、取消、连续性等,但我仍然无法理解这些问题:
相比之下,异步编程模型(APM)和基于事件的异步模式(EAP)各有什么优势?TPL如何轻松地包装APM意味着APM和EAP都被TPL取代了?
最重要的是:在socket编程中应该使用哪种方法;
1. APM? 2. EAP? 3. 通过Task包装的APM或EAP? 4. 使用Socket类的阻塞方法在任务中使用TPL? 5. 其他?