.net IAsyncResult模式的优势是什么?
我觉得很多类(例如.net IAsyncResult模式的优势是什么?,.net,multithreading,.net-2.0,iasyncresult,.net,Multithreading,.net 2.0,Iasyncresult,我觉得很多类(例如TcpClient,UdpClient,HttpListener)如果是事件驱动的,它们会更容易理解和使用。而且IAsyncResult模式很难实现,因为它会让您接触到各种奇怪的用例: 若调用者在一行中调用多个Begin方法会怎么样 如果调用者混合了Begin和常规方法怎么办 等等。尽管如此,微软还是选择在大多数地方使用它。为什么? 编辑:请将讨论重点放在.NET 2.0上,因为这是我必须处理的问题。此模式没有太多优势 在.NET1.0中,在泛型和lambda表达式之前,这是唯
TcpClient
,UdpClient
,HttpListener
)如果是事件驱动的,它们会更容易理解和使用。而且IAsyncResult
模式很难实现,因为它会让您接触到各种奇怪的用例:
编辑:请将讨论重点放在.NET 2.0上,因为这是我必须处理的问题。此模式没有太多优势 在.NET1.0中,在泛型和lambda表达式之前,这是唯一可用的异步模式 更现代的基于任务的模式更好,原因有很多,包括类型安全、更简单的错误处理、延续、
When*()
方法等
等等。尽管如此,微软还是选择在大多数地方使用它。为什么?
使用IAsyncResult
的异步模式是框架中使用的原始异步编程模式。它几乎没有什么优势,而且随着时间的推移,复杂性导致了新模式的开发
后来引入了事件异步编程(EAP)(其中有一个带有完成事件的“开始”方法)。这解决了很多复杂性,但在许多情况下仍然很难使用,因为您仍然需要将逻辑拆分为多个方法
然而,当前的异步模式是基于.NET4的Task
和Task
类的,它提供了巨大的优势,特别是当与C#5的异步/等待支持相结合时。幸运的是,它可以轻松地将基于IAsyncResult
的异步方法对自动包装到任务中,因此可以使用新模式。NET 4.5添加了许多框架异步方法的新版本,这些方法返回任务
,因此新的异步
/等待
语言支持可以与框架方法一起使用。这是所有异步编程的首选方法