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

发布时间 2023-10-13 11:03:16作者: 塔斯丁狗

解决什么问题?

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】