在.NET异步开发的有多少款?

问题描述 投票:8回答:3

我使用C#学习异步编程和我通常使用BeginInvoke,但我不是很肯定地生成异步应用程序的其他方法。

我曾问一个关于这个问题,见下面的链接了解详情:

How to return T value from BeginInvoke?

在上面的链接,Gravell说,有异步发展的四种模式

有至少4个,然后 - 定期回调(非APM,非EAP)也并不鲜见

但溢说,主要有三种:

有3种型号在.NET异步发展

  • APM - (BeginXXX / EndXXX),它使用的是在这里,在长期运行的任务完成时,它回调到在EndXXX方法代码
  • EAP - 基于事件。在这个模型中,长时间运行的任务完成时,引发事件,告知你的代码。
  • TPL - 新的.NET 4,这是基于任务的版本。它看起来最像同步编程客户端代码,使用流畅的界面。它调用回你的代码中使用ContinueWith

任何人都可以帮我在这?

我已经搜索google.com了很多,但实际上他们使用BeginInvoke最。谢谢你的帮助。

c# asynchronous model
3个回答
4
投票

Thread.Start - 野蛮

delegate.BeginInvoke/EndInvoke - “老”标准

ThreadPool.QueueUserWorkItem - 智能

TaskFactory.StartNew - 只有这样,才能正确它做(根据Patterns of parallel programming本书|我建议你先阅读它歧义)


2
投票

有很多可以在长期陷入“同步发展。”


首先,你可能想在后台线程上执行代码。我最近更新一个blog post of mine对比在后台执行代码的几种常见方法。这里的列表,以便从最希望至少包括:

  1. Task(13759异步/等待)。
  2. Task(如所使用的任务并行库)。
  3. BackgroundWorker
  4. Delegate.BeginInvoke
  5. ThreadPool.QueueUserWorkItem
  6. Thread

在另一方面,你可能要代表异步操作(这可能会或可能不会在后台线程执行实际的代码)。在这种情况下,有几种方法,以便从最希望至少包括:

  1. Task(在Task-based Asynchronous Pattern (TAP)的风格)
  2. IAsyncResult / Begin*方法End*(其具有不幸名称Asynchronous Programming Model (APM))。
  3. 使用Event-based Asynchronous Pattern (EAP) A组分写入。

(作为一个方面说明,BackgroundWorker是EAP,和Delegate.BeginInvoke是APM)。


在另一方面,你可能意味着在一般的异步编程,这可以被解释为被动方式。在这种情况下,只有两种方法,我知道的:

  1. Reactive Extensions (Rx)
  2. Event-based Asynchronous Pattern (EAP)

但是,你可以做任何事件驱动程序是反应到一定程度的情况下,所以只处理UI事件是一个(简单)形式的“异步编程。”


此外,这些只是普通车型。任何平台或库可以添加更多。下面是一些我的头顶部:

  • Socket类有APM的一种特殊形式,可以被用来最小化的存储器分配。它的工作原理非常类似于APM,但不适合的模式。
  • 在WinRT中运行(在Windows 8推出)有自己的异步操作(IAsyncOperation<TResult>IAsyncInfo)的表示。
  • Windows手机有一个background agent,它允许你在后台运行代码,即使你的应用程序当前未运行的具体支持。

1
投票

这肯定会是学习Mikant异步发展所描述的方法是有用的。只是想给你一个抬头尽管这C#5.0是完全重新设计如何与异步的语言交易。这将是其主旋律与引入两个新的关键字,异步和等待一起。您只需拨打等候在长时间运行的任务,它会开始执行任务,并控制返回给调用方法。一旦任务完成后,会用代码的其余部分进行。

下面是它的使用和解释的全部细节一个出色的视频。它不仅介绍了执行异步操作,但新的样式进行全面审查的老办法。这使得编写异步应用一吨更容易,更可读与自然流动。

这是C#异步行为,未来这么好值得学习。

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

© www.soinside.com 2019 - 2024. All rights reserved.