ASP.Net vs MVC vs WebAPI和UseTaskFriendlySynchronizationContext

前端之家收集整理的这篇文章主要介绍了ASP.Net vs MVC vs WebAPI和UseTaskFriendlySynchronizationContext前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个ASP.Net MVC和WebAPI项目.大多数是最新的(MVC 5 / WebAPI 2).我一直在重新检查我的安全假设,因为我实现了全局过滤器(对于MVC)和委托处理程序(用于WebAPI)来统一系统的安全性.

在这种情况下,我遇到了一些文章和帖子(见下文),您应该总是将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

解决方法

缺少的关键参考是 this blog post.具体来说,您需要设置UseTaskFriendlySynchronizationContext或将targetFramework设置为4.5.创建一个新项目将targetFramework设置为4.5,因此您将获得正确的行为(UseTaskFriendlySynchronizationContext隐式设置为true).

回答你的具体问题:

>该设置影响ASP.NET请求处理的各种请求,而不仅仅是WebForms.>大多数异步教程假定GUI应用程序场景.>我不确定我认为这会更好一个单独的问题.我的直觉是你离开ASP.NET上下文后不能依赖Thread.CurrentPrincipal.

猜你在找的asp.Net相关文章