c# – 为什么在使用asyncawait与控制台应用程序时需要AsyncContext?

c# – 为什么在使用asyncawait与控制台应用程序时需要AsyncContext?,第1张

概述我在我的控制台应用程序中调用异步方法.我不想让应用程序在开始之后不久就退出,即在等待完成的任务之前.看来我可以这样做: internal static void Main(string[] args){ try { Task.WaitAll(DoThisAsync()); } catch (Exception ex) { C 我在我的控制台应用程序中调用异步方法.我不想让应用程序在开始之后不久就退出,即在等待完成的任务之前.看来我可以这样做:
internal static voID Main(string[] args){    try    {        Task.WaitAll(DoThisAsync());    }    catch (Exception ex)    {        Console.Error.Writeline(ex);        throw;    }}internal static async Task DoThisAsync(){    //...}

但是根据Stephen Cleary’s article的看法,我似乎无法做到这一点,而应该为异步方式创建一些上下文,以便在完成时返回(例如AsyncContext).

上面的代码工作虽然,它返回在主线程上Task.WaitAll(DoThisAsync()),所以为什么我需要使用自定义上下文?

解决方法 这不是必需的这只是我的喜好

您可以同步阻止Main中的任务(使用Wait / Result / WaitAll).语义略有不同;特别是如果异步代码失败,那么Wait / Result / WaitAll会将异常包装在AggregateException中,而AsyncContext则不会.

另外,AsyncContext特别处理主线程;而不是将连续发送到线程池,它会将它们发送回该主线程(默认情况下,您可以随时使用ConfigureAwait(false)来避免这种情况).如果我正在编写“概念证明”控制台应用程序,我觉得这很有用,因为AsyncContext的行为与UI上下文非常相似.

但是在一天结束的时候,这只是一个偏好的问题.

总结

以上是内存溢出为你收集整理的c# – 为什么在使用async / await与控制台应用程序时需要AsyncContext?全部内容,希望文章能够帮你解决c# – 为什么在使用async / await与控制台应用程序时需要AsyncContext?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存