我使用C#学习异步编程和我通常使用BeginInvoke
,但我不是很肯定地生成异步应用程序的其他方法。
我曾问一个关于这个问题,见下面的链接了解详情:
How to return T value from BeginInvoke?
在上面的链接,Gravell说,有异步发展的四种模式
有至少4个,然后 - 定期回调(非APM,非EAP)也并不鲜见
但溢说,主要有三种:
有3种型号在.NET异步发展
BeginXXX
/ EndXXX
),它使用的是在这里,在长期运行的任务完成时,它回调到在EndXXX
方法代码ContinueWith
。任何人都可以帮我在这?
我已经搜索google.com了很多,但实际上他们使用BeginInvoke
最。谢谢你的帮助。
Thread.Start
- 野蛮
delegate.BeginInvoke/EndInvoke
- “老”标准
ThreadPool.QueueUserWorkItem
- 智能
TaskFactory.StartNew
- 只有这样,才能正确它做(根据Patterns of parallel programming
本书|我建议你先阅读它歧义)
有很多可以在长期陷入“同步发展。”
首先,你可能想在后台线程上执行代码。我最近更新一个blog post of mine对比在后台执行代码的几种常见方法。这里的列表,以便从最希望至少包括:
Task
(13759异步/等待)。Task
(如所使用的任务并行库)。BackgroundWorker
。Delegate.BeginInvoke
。ThreadPool.QueueUserWorkItem
。Thread
在另一方面,你可能要代表异步操作(这可能会或可能不会在后台线程执行实际的代码)。在这种情况下,有几种方法,以便从最希望至少包括:
Task
(在Task-based Asynchronous Pattern (TAP)的风格)IAsyncResult
/ Begin*
方法End*
(其具有不幸名称Asynchronous Programming Model (APM))。(作为一个方面说明,BackgroundWorker
是EAP,和Delegate.BeginInvoke
是APM)。
在另一方面,你可能意味着在一般的异步编程,这可以被解释为被动方式。在这种情况下,只有两种方法,我知道的:
但是,你可以做任何事件驱动程序是反应到一定程度的情况下,所以只处理UI事件是一个(简单)形式的“异步编程。”
此外,这些只是普通车型。任何平台或库可以添加更多。下面是一些我的头顶部:
Socket
类有APM的一种特殊形式,可以被用来最小化的存储器分配。它的工作原理非常类似于APM,但不适合的模式。IAsyncOperation<TResult>
和IAsyncInfo
)的表示。这肯定会是学习Mikant异步发展所描述的方法是有用的。只是想给你一个抬头尽管这C#5.0是完全重新设计如何与异步的语言交易。这将是其主旋律与引入两个新的关键字,异步和等待一起。您只需拨打等候在长时间运行的任务,它会开始执行任务,并控制返回给调用方法。一旦任务完成后,会用代码的其余部分进行。
下面是它的使用和解释的全部细节一个出色的视频。它不仅介绍了执行异步操作,但新的样式进行全面审查的老办法。这使得编写异步应用一吨更容易,更可读与自然流动。
这是C#异步行为,未来这么好值得学习。