c# – 为什么在使用async / await与控制台应用程序时需要AsyncCo
发布时间:2020-12-15 04:14:40 所属栏目:百科 来源:网络整理
导读:我在我的控制台应用程序中调用异步方法.我不想让应用程序在开始之后不久就退出,即在等待完成的任务之前.看来我可以这样做: internal static void Main(string[] args){ try { Task.WaitAll(DoThisAsync()); } catch (Exception ex) { Console.Error.WriteLi
我在我的控制台应用程序中调用异步方法.我不想让应用程序在开始之后不久就退出,即在等待完成的任务之前.看来我可以这样做:
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上下文非常相似. 但是在一天结束的时候,这只是一个偏好的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- macos – 当drawingBackground = false时,不显示NSTextView
- flash player完全屏蔽右键菜单方法
- oracle – 不使用NULL值进行选择
- c – 整数溢出错误
- PostgreSQL alter type timestamp without time zone – >
- React Native-5.React Native组件封装,组件传值实例开发
- quick-cocos2dx在eclipse下的lua调试
- Postgresql9.6--数据类型
- 有些rpm的安装需要依赖其他东西,实在不行就强行安装,哈
- c# – 当应用程序重新聚焦时重新启动MediaCapture