当前位置: 首页 > 编程语言 > C#

AsyncAwait最佳实践分享

时间:2023-04-11 00:22:41 C#

AsyncAwait最佳实践掌握了asyncawait的概念并一直在使用,但对最佳实践有一些疑问。是否可以在while(条件)循环中使用await来继续获取可能存在的数据,直到while条件发生变化,例如stopProcessingMessages=false。在像winforms这样的应用程序中,当UI在它的线程上运行时,在按钮点击等上使用异步/等待是相当简单的,但是如果我想在整个控制台应用程序甚至窗口中异步执行它怎么办?服务。最初启动第一个等待任务的最佳做法是什么,即Task.Run(()=>...)?我希望我在第二个问题中说得通。我想充分利用异步并充分发挥它的潜力,但只需要了解如何在它冒泡到所有其他异步函数之前启动初始异步操作。抱歉,我在火车上使用智能手机时没有使用正确的代码块。我已经掌握了asyncawait的概念并一直在使用它,但确实对最佳实践有一些疑问。我有一篇介绍async/await的博文,比大多数文章更详细,涵盖了几个最佳实践。是否可以在while(条件)循环中使用await来继续获取可能存在的数据,直到while条件发生变化,例如stopProcessingMessages=false。你想避免紧密循环。所以while(condition)GetDataIfPresent();会消耗大量的CPU。或者,如果stopProcessingMessages为真,您可以使用返回null(或其他)的异步方法。在这种情况下,您的代码将是while(true),而更像TAP的解决方案是使用CancellationSource而不是标志。另见TPL数据流;听起来它对您的情况可能有用。控制台应用程序,甚至Windows服务。最初启动第一个等待任务的最佳做法是什么对于控制台应用程序,您可以等待顶级任务。对于通常的准则(等待而不是等待),这是一个可接受的例外。Wait将在控制台应用程序运行期间消耗线程,但这通常不足以保证更复杂的解决方案。如果您真的想为您的控制台应用程序安装单线程上下文,您可以使用AsyncEx库中的AsyncContext.Run。对于Win32服务,通常需要启动自己的线程。您可以使用Task.Run(如果您需要多线程上下文)或AsyncEx中的AsyncContextThread(如果您需要单线程上下文)。早上好,我宁愿使用常规任务并在第一个场景中将TaskCreationOption设置为“LongRunning”,而不是异步/等待模式。这样你的整个块将在一个长时间运行的任务中执行。在每个while循环中使用await时,您会在每个循环中启动一个新任务-可以工作,但它可能不是那么理想;-)关于你的第二个问题,对不起,但我不明白你的意思。希望这可以帮助。使用循环来保存可能存在的数据是不行的。您可以创建一个异步调用,它会在完成时自动调用回调方法。在这种情况下,“等待”阶段将在操作系统机制中发生,以最佳方式处理此等待阶段以使用所使用的操作系统。进一步研究该主题的请看这里:http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspxC#学习教程:AsyncAwait最佳实践分享就到这里,如果对大家有帮助的话很有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: