Ans*_*iņš 2 .net multithreading iasyncresult .net-2.0
我觉得很多类(例如TcpClient,UdpClient,HttpListener)会一直更容易理解,如果他们是事件驱动使用.并且IAsyncResult模式实现起来非常困难,因为它可以让您了解各种奇怪的用例:
等等.尽管如此,微软还是选择在大多数地方使用它.为什么?
编辑:请集中讨论.NET 2.0,因为这是我必须使用的.
等等.尽管如此,微软还是选择在大多数地方使用它.为什么?
使用的异步模式IAsyncResult是Framework中使用的原始异步编程模式.它几乎没有什么优势,而且复杂性导致新的模式随着时间的推移而发展.
事件异步编程(EAP)稍后介绍(其中您有一个带有完成事件的"Begin"方法).这解决了很多复杂问题,但在许多情况下仍然难以使用,因为您必须将逻辑拆分为多种方法.
但是,当前的异步模式基于.NET 4 Task和Task<T>类,并提供了巨大的优势,特别是在与C#5的异步/等待支持相结合时.幸运的是,TaskFactory.FromAsync可以用来轻松地将IAsyncResult基于异步的方法对Task<T>自动包装成一个,因此可以使用新的模式..NET 4.5添加了返回的许多框架的异步方法的新版本Task<T>,因此新的async/ await语言支持可以与框架方法一起使用.这是所有异步编程的首选方法.