IAsyncResult模式的优势是什么?

时间:2012-10-05 16:40:51

标签: .net multithreading .net-2.0 iasyncresult

我觉得很多课程(例如TcpClientUdpClientHttpListener)如果是事件驱动的话会更容易理解和使用。并且IAsyncResult模式实现起来非常困难,因为它可以让您了解各种奇怪的用例:

  1. 如果调用者连续调用多个Begin方法怎么办?
  2. 如果来电者混合使用Begin和常规方法怎么办?
  3. 等等。尽管如此,微软还是选择在大多数地方使用它。为什么呢?

    编辑:请将讨论重点放在.NET 2.0上,因为这是我必须使用的内容。

2 个答案:

答案 0 :(得分:6)

  

等等。尽管如此,微软还是选择在大多数地方使用它。为什么呢?

使用IAsyncResult的异步模式是Framework中使用的原始异步编程模式。它没有什么优势,而且复杂性导致了新的模式随着时间的推移而发展。

事件异步编程(EAP)稍后介绍(其中您有一个带有完成事件的“Begin”方法)。这解决了很多复杂性,但在许多情况下仍然很难使用,因为你必须将逻辑分成多种方法。

但是,当前的异步模式基于.NET 4的TaskTask<T>类,并提供了巨大的优势,特别是在与C#5的异步/等待支持相结合时。幸运的是,TaskFactory.FromAsync可用于轻松地将基于IAsyncResult的异步方法对自动包装到Task<T>中,因此可以使用新模式。 .NET 4.5添加了许多框架的异步方法的新版本,这些方法返回Task<T>,因此新的async / await语言支持可以与框架方法一起使用。这是所有异步编程的首选方法。

答案 1 :(得分:3)

这种模式没有很多优点。

在.Net 1.0中,在泛型和lambda表达式之前,这是唯一可用的异步模式。

更现代的基于任务的模式由于多种原因而更加出色,包括类型安全性,更简单的错误处理,延续,When*()方法等。