NET中异步开发的模型有多少

本文关键字:模型 多少 开发 异步 NET | 更新日期: 2023-09-27 18:24:34

我正在使用C#学习异步编程,通常使用BeginInvoke,但我不太确定创建异步应用程序的其他方法。

我问了一个关于这个的问题,请参阅下面的链接了解更多详细信息:

如何从BeginInvoke返回T值?

在上述链接中,Gravell表示异步开发有四种模式

至少有4个,那么-常规回调(非APM、非EAP)也不少见

但Overflow说有三个:

NET 中有3种异步开发模型

  • APM-(BeginXXX/EndXXX),当长时间运行的任务完成时,它会调用回EndXXX方法中的代码

  • EAP-基于事件。在这个模型中,当长时间运行的任务完成时,会引发一个事件来通知您的代码。

  • TPL-.NET 4中的新增功能,这是基于任务的版本。它看起来最像客户端代码的同步编程,使用流畅的接口。它使用ContinueWith回调您的代码。

有人能帮我吗?

我在谷歌上搜索了很多,但实际上他们使用BeginInvoke的次数最多。谢谢你的帮助。

NET中异步开发的模型有多少

Thread.Start-残酷的

delegate.BeginInvoke/EndInvoke-"旧"标准

ThreadPool.QueueUserWorkItem-智能

TaskFactory.StartNew-唯一正确的方法(根据Patterns of parallel programming的书|我建议你先读它以消除歧义)

术语"异步开发"中有很多内容


首先,您可能希望在后台线程上执行代码。我最近更新了一篇博客文章,对比了在后台执行代码的几种常见方法。以下是列表,按从最理想到最不理想的顺序排列:

  1. Task(由async/await使用)
  2. Task(由任务并行库使用)
  3. BackgroundWorker
  4. Delegate.BeginInvoke
  5. CCD_ 16
  6. Thread

另一方面,您可能希望表示异步操作(可能是也可能不是在后台线程上执行的实际代码)。在这种情况下,有几种方法,从最理想到最不理想依次为:

  1. Task(采用基于任务的异步模式(TAP)的风格)
  2. CCD_ 19与Begin*/CCD_
  3. 使用基于事件的异步模式(EAP)编写的组件

(作为旁注,BackgroundWorker是EAP,而Delegate.BeginInvoke是APM)。


另一方面,您通常可以指异步编程,这可以被解释为反应式方法。在这种情况下,我只知道两种方法:

  1. 反应性扩展(Rx)
  2. 基于事件的异步模式(EAP)

然而,您可以证明任何事件驱动的程序在某种程度上都是被动的,因此仅处理UI事件是"异步编程"的一种(简单)形式


此外,这些只是常见的型号。任何平台或库都可以添加更多。下面是我脑海中浮现的一些:

  • Socket类具有一种特殊形式的APM,可用于最小化内存分配。它的工作原理与APM非常相似,但不符合模式
  • WinRT运行时(在Windows8中提供)有自己的异步操作表示(IAsyncOperation<TResult>IAsyncInfo
  • Windows Phone特别支持后台代理,即使您的应用程序当前未运行,也可以在后台运行代码

学习Mikant为异步开发描述的方法肯定会很有用。我只是想提醒您,C#5.0正在完全重新设计该语言处理异步的方式。这将是它的主要主题,同时引入两个新的关键字,async和await。您只需对长时间运行的任务调用wait,它就会启动任务并将控制权返回给调用方法。一旦任务完成,它就继续执行其余的代码。

这是一个优秀的视频的全部细节,它的使用和解释。它不仅描述了执行异步操作的旧方法,而且对新样式进行了全面的回顾。它使编写异步应用程序变得更加容易,并且使用自然流可读性更强。

这是C#异步行为的未来,非常值得学习。

http://channel9.msdn.com/events/PDC/PDC10/FT09/