我目前正在使用Threadlocal来保存当前用户的id,以便根据每个用户的web请求在整个应用程序中使用。在较低的环境中,我无法访问HttpContext,但希望访问静态UserId,而不将其作为参数传递到任何地方。最近,我通过async/await.添加了并行操作--这不再能保证我在每个Task.中都有合适的值
我在.Net 4.6中研究并发现了.Net 4.6,但目前仅限于.Net 4.5.1。作为另一种选择,CallContext.LogicalGet/SetData()是否能够实现我正在寻找的目标?
发布于 2016-05-04 17:18:33
是的,逻辑调用上下文将以异步本地方式工作。
AsyncLocal<T>在整个.NET框架上使用逻辑调用上下文--它只是有一个更好的API,它将与即将到来的.NET核心平台一起工作,而逻辑调用上下文则不会。
请记住,正如我在博客中描述的那样,只存储不可变的数据。
此外,异步本地值对性能也有一定的影响.显式传递参数几乎肯定会有更好的性能,这可能是您自己的RequestContext类型的一部分。ASP.NET vCore正在远离HttpContext.Current;它仍然有HttpContext的概念,但是它不再充当异步本地的角色--它是显式传递的。
https://stackoverflow.com/questions/37009413
复制相似问题