在 c# 中使用 ConfigureAwait 为 false 的真实解释



我正在学习async/await,我看到了一个博客,其中提到了将ConfigureAwait与async/await一起使用。它读起来是这样的:

ConfigureAwait 接受布尔值 continueOnCapturedContext 参数:传递 true 表示使用默认行为,传递 false 意味着系统不需要强制将委托的调用封送回原始上下文,而是可以在系统认为合适的任何位置执行委托。

这些信息没有详细说明,任何人都可以解释使用它的真实世界示例。我还进一步搜索,发现它应该与HTTP调用等一起使用,但没有具体的答案来解释我们为什么要使用它。

参考链接: https://blogs.msdn.microsoft.com/windowsappdev/2012/04/24/diving-deep-with-winrt-and-await/

这对于单个线程处理多个操作的情况非常有用,例如 WPF 中的调度程序线程或 IIS 中的主机线程。

这在 Asp.Net(在 Windows 和完整的 .NET 上,托管在 IIS 中)中最为明显 ->如果您不指定.ConfigureAwait(false)并且请求需要大量时间,则同一 w3wp.exe 进程无法处理其他请求。

整个应用程序基本上被阻止了。

这样做的意思是说控件可以使用线程池中的另一个线程返回到此堆栈,实质上是解锁主线程。

最新更新