gpt4 book ai didi

c# - CallContext.LogicalGetData() 与 ThreadLocal/ThreadStatic

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:47 24 4
gpt4 key购买 nike

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

中都有正确的值

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

最佳答案

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

AsyncLocal<T>在完整的 .NET 框架上使用逻辑调用上下文——它只是有一个更好的 API,并将与即将推出的 .NET Core 平台一起工作,而逻辑调用上下文则不会。

记得给only store immutable data ,正如我在我的博客上所描述的那样。

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

关于c# - CallContext.LogicalGetData() 与 ThreadLocal/ThreadStatic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com