它确保您的继续将获得与原始呼叫者相同的HttpContext.Current?
它不保证延续将在与呼叫者相同的线程上执行?
如果后一种假设不是真的,并且我得到原始的线程,我可以确保在延续中获得相同的线程上下文吗?我的意思是与线程和线程本地存储相关联的主体/文化?这很重要,因为ASP.NET本地化依赖于线程的文化,我的应用程序依赖于.NET角色安全模型(线程的主体)。
解决方法
Am I correct that It does guarantee your continuations will get the same HttpContext.Current as original callers? It does not guarantee the continuations will execute on the same thread as the callers?
是的,HttpContext.Current被保留,是的,继续可能在不同的线程上执行。
I mean principal/culture associated with the thread and thread local storage? That’s important because ASP.NET localization relies on thread’s culture and my application relies on .NET role security model (thread’s principal).
普通线程本地存储丢失。您可以通过使用LogicalCallContext(与ExecutionContext一起流动)来缓解这一点,但是通过异步,只需直接引用变量就更容易了。
校长始终保留;否则将是一个安全风险。这与ExecutionContext一起流动。
我相信文化流动与AspNetSynchronizationContext,但我没有测试这个在.NET 4.5’s new implementation。
你可能会发现我的MSDN article on SynchronizationContext
有帮助。这不是官方文档(我不适用于微软),但至少是这样的。请注意,该文章中引用的AspNetSynchronizationContext现在在.NET 4.5中称为LegacyAspNetSynchronizationContext。
另一个伟大的资源是Stephen Toub的ExecutionContext
vs. SynchronizationContext
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。