首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CallContext.LogicalGetData()与ThreadLocal/ThreadStatic

CallContext.LogicalGetData()与ThreadLocal/ThreadStatic
EN

Stack Overflow用户
提问于 2016-05-03 16:24:41
回答 1查看 2.6K关注 0票数 2

我目前正在使用Threadlocal来保存当前用户的id,以便根据每个用户的web请求在整个应用程序中使用。在较低的环境中,我无法访问HttpContext,但希望访问静态UserId,而不将其作为参数传递到任何地方。最近,我通过async/await.添加了并行操作--这不再能保证我在每个Task.中都有合适的值

我在.Net 4.6中研究并发现了.Net 4.6,但目前仅限于.Net 4.5.1。作为另一种选择,CallContext.LogicalGet/SetData()是否能够实现我正在寻找的目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-04 17:18:33

是的,逻辑调用上下文将以异步本地方式工作。

AsyncLocal<T>在整个.NET框架上使用逻辑调用上下文--它只是有一个更好的API,它将与即将到来的.NET核心平台一起工作,而逻辑调用上下文则不会。

请记住,正如我在博客中描述的那样,只存储不可变的数据

此外,异步本地值对性能也有一定的影响.显式传递参数几乎肯定会有更好的性能,这可能是您自己的RequestContext类型的一部分。ASP.NET vCore正在远离HttpContext.Current;它仍然有HttpContext的概念,但是它不再充当异步本地的角色--它是显式传递的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37009413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档