在 C# 中使用 ConfigureAwait 为 false 的真实世界解释
Real world explanation of using ConfigureAwait to false in c#
我正在学习 async/await,我发现了博客,其中提到了将 ConfigureAwait 与 async/await 一起使用。内容是这样的:
ConfigureAwait接受一个Boolean continueOnCapturedContext参数:传递true意味着使用默认行为,传递false意味着系统不需要强制将委托的调用编组回原始上下文并且可以而是在系统认为合适的地方执行委托。
资料讲得不多,谁能解释一下实际使用的例子。我还进一步搜索,发现它应该与 HTTP 调用等一起使用,但没有具体回答我们为什么要使用它。
参考link:https://blogs.msdn.microsoft.com/windowsappdev/2012/04/24/diving-deep-with-winrt-and-await/
这对于单个线程处理多个操作的场景很有用,想想 WPF 中的 Dispatcher 线程或 IIS 中的主机线程。
在 Asp.Net 中最为明显(在 Windows 和完整的 .net 上,托管在 IIS 中)-> 如果您不指定 .ConfigureAwait(false)
并且请求占用大量资源当然,同一 w3wp.exe 进程无法处理其他请求。
整个应用基本上被阻止了。
这是在说控件可以 return 使用线程池中的另一个线程访问此堆栈,基本上解除了主线程的阻塞。
我正在学习 async/await,我发现了博客,其中提到了将 ConfigureAwait 与 async/await 一起使用。内容是这样的:
ConfigureAwait接受一个Boolean continueOnCapturedContext参数:传递true意味着使用默认行为,传递false意味着系统不需要强制将委托的调用编组回原始上下文并且可以而是在系统认为合适的地方执行委托。
资料讲得不多,谁能解释一下实际使用的例子。我还进一步搜索,发现它应该与 HTTP 调用等一起使用,但没有具体回答我们为什么要使用它。
参考link:https://blogs.msdn.microsoft.com/windowsappdev/2012/04/24/diving-deep-with-winrt-and-await/
这对于单个线程处理多个操作的场景很有用,想想 WPF 中的 Dispatcher 线程或 IIS 中的主机线程。
在 Asp.Net 中最为明显(在 Windows 和完整的 .net 上,托管在 IIS 中)-> 如果您不指定 .ConfigureAwait(false)
并且请求占用大量资源当然,同一 w3wp.exe 进程无法处理其他请求。
整个应用基本上被阻止了。
这是在说控件可以 return 使用线程池中的另一个线程访问此堆栈,基本上解除了主线程的阻塞。