我在 GitHub 上遇到了一个问题 (https://github.com/HTBox/allReady/issues/1313),讨论了在 ASP.NET Core 中移除代码中的 ConfigureAwait(false)
,称其为多余且无作用。
ConfigureAwait(false)
的调用是多余的且没有任何作用。
我在这里找到的最好的解释是一个答案中的“旁注” (来自 Stephen Cleary, https://dev59.com/b1kS5IYBdhLWcg3wN0K_#40220190),其中提到:
ASP.NET Core 不再有 "context"
那么,在ASP.NET Core中是否真的不需要使用 ConfigureAwait(false)
呢(即使使用完整的 .Net Framework)?它在一些情况下是否具有性能上的实际收益或结果/语义上的差异呢?
编辑:在控制台应用程序或 IIS 中托管时,此方面是否有所不同?
ConfigureAwait(false)
,因为该库可能被不同的应用程序(如ASP.NET Core、WPF、UWP、控制台等)使用。 - TsengConfigureAwait(false)
在经典的ASP.NET中可能是相关的,但绝不是必要的。这是一种权衡:它可以在某种程度上减轻一些同步/异步死锁(这些本来就是设计缺陷--除非有人做了愚蠢的事情,否则它们不存在),并且偶尔可以通过不重新加载上下文来提高大约微秒级别的性能。代价是无法依赖上下文,并且需要在代码中使用ConfigureAwait
。https://dev59.com/L4fca4cB1Zd3GeqPh1_F#28227165 - Dax Fohl