在这种情况下,我遇到了一些文章和帖子(见下文),您应该总是将UseTaskFriendlySynchronizationContext设置为true(默认为false).这对我来说似乎是奇怪的,即使在VS2013中,使用MVC 5和WebAPI 2新项目模板(以及ASP.Net WebForms模板)也不会设置此应用程序设置.
关于这个设置的MSDN文档实际上是不存在的,我发现这个说明它是异步编程所需的帖子似乎在WebForms的上下文中.
所以这里是我的问题:
>这个设置适用于ASP.Net的任何东西,或ASP.Net特定的页面生命周期内容(我没有使用太多)
>如果它对现代异步编程非常重要,那么为什么没有任何教程或模板参考呢?
>在使用ConfigureAwait(false)的引用库中使用Thread.CurrentPrincipal的声明会导致任何问题,或者ExecutionContext的逻辑调用上下文的流动是否会照顾到我? (我的阅读和测试到目前为止表明它会)
这里有一些关于UseTaskFriendlySynchronizationContext的文章:
> Set Thread.CurrentPrincipal Asynchronously?
> ASP.NET appSettings Element on MSDN
> What’s the meaning of “UseTaskFriendlySynchronizationContext”?
> Understanding the SynchronizationContext
in ASP.NET by Marcus van Houdt
> Why is an “await Task.Yield()” required for Thread.CurrentPrincipal to flow correctly?
一些文章真的帮助我了解这些东西如何工作,从来没有提到UseTaskFriendlySynchronizationContext:
> ExecutionContext vs SynchronizationContext by Stephen Toub
> It’s All About the SynchronizationContext by Stephen Cleary
解决方法
回答你的具体问题:
>该设置影响ASP.NET请求处理的各种请求,而不仅仅是WebForms.>大多数异步教程假定GUI应用程序场景.>我不确定我认为这会更好一个单独的问题.我的直觉是你离开ASP.NET上下文后不能依赖Thread.CurrentPrincipal.