加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – AspNetSynchronizationContext

发布时间:2020-12-16 00:35:03 所属栏目:asp.Net 来源:网络整理
导读:尝试使用新的C#5异步模型,令我惊讶的是AspNetSynchronizationContext是一个内部类(以及AspNetSynchronizationContextBase基础)。因此无证。但是,在ASP.NET代码中使用异步/等待功能时,了解它的功能至关重要。我是对的 它确保您的继续将获得与原始呼叫者相
尝试使用新的C#5异步模型,令我惊讶的是AspNetSynchronizationContext是一个内部类(以及AspNetSynchronizationContextBase基础)。因此无证。但是,在ASP.NET代码中使用异步/等待功能时,了解它的功能至关重要。我是对的
它确保您的继续将获得与原始呼叫者相同的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读