我在 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 中托管,在这方面有什么不同吗?
ConfigureAwait(false)
,因为该库可以被不同的应用程序(ASP.NET Core、WPF、UWP、控制台等)使用。
ConfigureAwait(false)
,虽然在 ASP.NET 经典中相关,但绝不是必需。这是一个权衡:它有点减轻了一些同步异步死锁(无论如何都是设计缺陷——除非有人做一些愚蠢的事情,否则它们不存在)并且偶尔通过不重新加载上下文来提高约微秒的性能。以无法依赖上下文为代价,并且在您的代码中全部包含 ConfigureAwait
。 stackoverflow.com/questions/28221508/…
ConfigureAwait
仅对在 a SynchronizationContext
的上下文中运行的代码有影响,而 ASP.NET Core 没有(ASP.NET“旧版”有)。
通用代码应该仍然 使用它,因为它可能正在运行 带有SynchronizationContext
。
ASP.NET Core SynchronizationContext
不定期副业成功案例分享