我已经掌握了异步的等待,并偶尔用它已经,但有关于最佳做法的几个问题的概念。
是它确定使用等待在一段时间(条件)循环,以保持读取可能存在的数据,直到而病情变化,例如stopProcessingMessages =假。
在应用程序中,如的WinForms,而UI运行在它的线程,使用异步/等待的操作,如点击一个按钮是相当琐碎,但是,如果我想在一整个控制台应用程序,甚至在Windows异步执行什么服务。 什么是先揭开序幕,首先的await任务的最佳做法,那会是Task.Run(()=> ...)?
我希望我在我的第二个问题,决策意识。 我要充分利用异步,并利用它来它的全部范围,而是只需要了解如何把它泡到所有其它异步函数之前揭开序幕,初始异步操作。
我在使用智能手机的火车没有使用正确的代码块的歉意。
我已经掌握了异步的等待,并偶尔用它已经,但有关于最佳做法的几个问题的概念。
我有一个介绍到async
/ await
博客文章是进入比大多数前奏更多的细节和还介绍了几种最佳做法。
是它确定使用等待在一段时间(条件)循环,以保持读取可能存在的数据,直到而病情变化,例如stopProcessingMessages =假。
你要避免紧密循环。 因此, while (condition) GetDataIfPresent();
是要消耗大量的CPU。
或者,你可以使用一个async
该方法返回的null
(或其他)是否stopProcessingMessages
是true
。 在这种情况下,你的代码将是while (true)
,更TAP样的解决方案是使用CancellationSource
而不是标志。
也看看TPL数据流 ; 这听起来像它可能是你的一种情况是有用的。
控制台应用程序,甚至是Windows服务。 什么是先揭开序幕,首先等待任务的最佳实践
对于控制台应用程序,你可以Wait
的顶级任务。 这是一个可接受的例外通常的准则(这是await
,而不是Wait
)。 Wait
荷兰国际集团将刻录线程的控制台应用程序的时间,但是这通常没有足够重要,值得更复杂的解决方案。 如果你想安装一个单线程上下文为您的控制台应用程序,你可以使用AsyncContext.Run
从我AsyncEx库 。
对于Win32服务,你通常就需要开始自己的线程 。 您可以使用Task.Run
这个(如果你想有一个多线程的上下文中),或AsyncContextThread
从AsyncEx(如果你想有一个单线程上下文)。
早上好,
我宁愿使用常规的任务,在你的比异步/ AWAIT模式第一个场景设置为“LongRunning”的TaskCreationOption。 这样,你的整个块,而在将一个长期运行的任务执行。 当使用内部的每个的await while循环,你将开始与每一个环一个新的任务 - 将工作,但它也许不那么最佳;-)
关于你的第二个问题,我很抱歉,但我不明白你的意思。
希望这可以帮助。
这是不正常使用循环以保持可能存在fething数据。你可以创建一个异步调用完成后程序自动将调用回调方法..“等待”阶段在这种情况下会在OS的机制发生哪些在最佳方式这个等待阶段治疗的OS使用。
看看这里为主体的进一步研究: http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx