在ASP.NET Core中相关的ConfigureAwait(false)?

时间:2017-02-05 14:21:18

标签: .net asp.net-core async-await

我偶然发现了GitHub上的一个问题(https://github.com/HTBox/allReady/issues/1313),他们讨论了如何从代码中取出ConfigureAwait(false),声称在 ASP.NET Core

  

ConfigureAwait(false)的调用是多余的,不执行任何操作

我能在这里找到的最好的答案是答案(来自Stephen Cleary,https://stackoverflow.com/a/40220190/2805831)告诉

  

ASP.NET Core不再具有“上下文”

那么, ASP.NET Core 中是否真的没有ConfigureAwait(false)(即使使用完整的.Net Framework)?在某些情况下,它在性能方面是否有任何实际的好处,或者在结果/语义方面是否有差异?

编辑:如果我将其作为控制台应用程序托管或在IIS中,它在这方面有所不同吗?

2 个答案:

答案 0 :(得分:46)

ConfigureAwait只对在ASP.NET核心没有的SynchronizationContext上下文中运行的代码产生影响(ASP.NET“Legacy”会这样做。)

通用代码仍应使用它,因为它可能与SynchronizationContext一起运行。

ASP.NET Core SynchronizationContext

答案 1 :(得分:14)

这怎么办?

目前(2020年2月),MS Blog上的开发人员建议使用ConfigureAwait(false) 为了提高性能,避免死锁。 https://devblogs.microsoft.com/dotnet/configureawait-faq/

我听说.NET Core中不再需要ConfigureAwait(false)。 真正?假。在.NET Core上运行时,确实需要 在.NET Framework上运行时,需要同样的理由。没事 在这方面有所改变。