我有几个ASP.Net MVC和WebAPI项目。其中大多数都是最新的(MVC 5 / WebAPI 2)。我一直在仔细检查我的安全假设,因为我正在实现一个全局过滤器(用于MVC)和一个委托处理程序(用于WebAPI)来统一整个系统的安全性。
在这种情况下,我发现了一些文章和帖子(见下文),其中说您应始终将UseTaskFriendlySynchronizationContext
设置为true
(默认为false
)。这对我来说似乎很奇怪,因为即使在VS2013中使用MVC 5和WebAPI 2的新项目模板(以及ASP.Net WebForms模板)也根本不设置此应用程序设置。
关于此设置的MSDN文档几乎不存在,我发现的帖子确实说它是异步编程所必需的,似乎是在WebForms的上下文中。
所以这是我的问题:
以下是我见过的关于UseTaskFriendlySynchronizationContext
的一些文章:
SynchronizationContext
in ASP.NET by Marcus van Houdt 有些文章真正帮助我掌握了所有这些从未提及UseTaskFriendlySynchronizationContext
的内容:
答案 0 :(得分:15)
缺少的密钥引用是this blog post。具体来说,您需要将设置为UseTaskFriendlySynchronizationContext
或将targetFramework
设置为4.5
。创建新项目会将targetFramework
设置为4.5
,这样您就可以获得正确的行为(UseTaskFriendlySynchronizationContext
隐式设置为true
)。
回答您的具体问题:
async
教程假设一个GUI应用程序场景。Thread.CurrentPrincipal
。