ConfigureAwait(false) 原理以及注意事项总结

解决什么问题?

1、避免线程死锁

2、可能的性能提升

存在的问题:

1、当代码在另一个线程上继续时,线程同步上下文将丢失,因为状态机改变。这里最大的损失是你会失去归属于线程的Culture和Language,其中包含了国家语言时区信息,以及来自原始线程的HttpContext.Current之类的信息。

因此,如果您不需要以此来做多语系或操作任何HttpContext类型设置,则可以安全地进行此方法的调用。注意:如果需要language/culture,可以始终在await之前存储当前相关状态值,然后在await新线程之后重新应用它。

2、项目如果是 Net Framework 以及Net stadard 平台,建议使用ConfigureAwait(false),或者是说需要兼容这两个平台的类库建议使用;如果是只使用Net Core的项目,则可以不使用,在NetCore中移除了SynchronizationContext。

参考文章:

1、https://www.cnblogs.com/xiaoxiaotank/p/13529413.html【理解C#中的ConfigureAwait】

2、https://zhuanlan.zhihu.com/p/552387337?utm_id=0【Async,Await和ConfigureAwait的关系】

3、https://zhuanlan.zhihu.com/p/376704108【ASP.NET Core为什么移除了SynchronizationContext】

4、https://blog.csdn.net/WPwalter/article/details/79673214【在编写异步方法时,使用 ConfigureAwait(false) 避免使用者死锁】

posted @   塔斯丁狗  阅读(461)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示