Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net IAsyncResult模式的优势是什么?_.net_Multithreading_.net 2.0_Iasyncresult - Fatal编程技术网

.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
模式很难实现,因为它会让您接触到各种奇怪的用例:

  • 若调用者在一行中调用多个Begin方法会怎么样
  • 如果调用者混合了Begin和常规方法怎么办
  • 等等。尽管如此,微软还是选择在大多数地方使用它。为什么?


    编辑:请将讨论重点放在.NET 2.0上,因为这是我必须处理的问题。

    此模式没有太多优势

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

    更现代的基于任务的模式更好,原因有很多,包括类型安全、更简单的错误处理、延续、
    When*()
    方法等

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

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

    后来引入了事件异步编程(EAP)(其中有一个带有完成事件的“开始”方法)。这解决了很多复杂性,但在许多情况下仍然很难使用,因为您仍然需要将逻辑拆分为多个方法

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