- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在使用 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/
在这种情况下,我看到线程的 CallContext 正在后续调用中转发数据。 考虑我有一个简单的 API,当它被查询时,将使用以下方式将一个数据条目设置到 CallContext 中: // entr
在 MVC 应用程序中,我需要存储一些用户数据以验证他是否拥有访问某些页面的所有权限(比如他是某个对象的所有者等)。我尝试在我的一项服务中添加一个私有(private)静态字段来处理用户数据,并添加一
我正在使用 Visual Studio 2015 和 .Net 我遇到了一个有点奇怪的问题。我有一个包含两个项目的 C# 解决方案。一个是标准 WPF 应用程序,另一个是 WPF 用户控件库。 WPF
根据我已阅读的所有内容,以下测试方法应该会通过。我试图理解它失败的原因。私有(private)异步方法中的第一个断言按预期通过。但是,一旦任务返回并等待。在 CallContext 中设置的值现在在检
CallContext 和 ThreadStatic 有什么区别? 我了解到,在 ASP.NET 环境中,存储在 CallContext 中的数据可以在整个请求期间保持不变,直到它结束,而 Threa
我有以下测试 [Test] public void aaa() { CallContext.LogicalSetData("aa", "1"); Action parallelMeth
根据我使用的是基于 async/await 的代码还是基于 TPL 的代码,我得到了关于清理逻辑 CallContext 的两种不同行为。 如果我使用以下异步/等待代码,我可以完全按照预期设置和清除逻
我目前正在使用 Threadlocal 来保存当前用户的 ID,以便根据每个用户的 Web 请求在整个应用程序中使用。我无法在较低环境中访问 HttpContext,但想访问静态 UserId 而无需
Asp.Net Core 是否跨请求保留 CallContext? 我们有一个将上下文属性(用户名)附加到线程的用例,它可以从我们的日志框架(NLog,MDLC)中提取。据我所知,MDLC 使用 Ca
我注意到 CallContext.LogicalSetData/LogicalGetData 没有按照我预期的方式工作。在 async 方法中设置的值会被恢复即使没有异步或任何类型的线程切换,无论如何
CallContext API 有LogicalGetData 和GetData,但是MSDN Documentation 并没有做太多解释两者之间的区别,并且当它们不同时。 有什么想法吗? 最佳答案
在使用 asp.net Web API 时,能否在整个请求中依赖 CallContext? 我已阅读decade-old blog post我不确定它是否仍然适用(如要求 there )。 假设 Th
我正在尝试将使用 CallContext.LogicalGet/SetData 的现有 .net 应用程序迁移到 .net 核心。 当 Web 请求命中应用程序时,我将 CorrelationId 保
各位, 假设我使用线程 10、11、12 中的 CallContext.SetData() 存储对象 Car 的三个新实例。这些线程完成执行。然后我执行另一个多线程操作(可能与第一个操作不同),该操作
AsyncLocal<>在 .NET Core 中,如 CallContext.LogicGetData/LogicSetData .怎么样GetData和 SetData ? Thread.GetD
我正在尝试根据自定义上下文返回不同的提供程序。鉴于以下 public interface IProvider { string WhoAreYou(); } 还有两个供应商 namespace
根据 this awesome blog ,即使使用 async/await(只要使用 .NET 4.5 和不可变数据),我们也可以安全地从 CallContext 的 LogicalContext
错误:无法从程序集“mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.Runti
我知道使用这些方法设置的 LogicalCallContext 会流向新线程,如果您使用像 ThreadPool.QueueUserWorkItem。问题是,当线程池重新使用具有此对象的线程时,逻辑调
我有这样的 SQSClient 设置: var client = new AmazonSQSClient(); new AWSSdkTracingHandler(AWSXRayRecorder.Ins
我是一名优秀的程序员,十分优秀!