什么';s是将对象附加到逻辑控制流的最佳方式

本文关键字:控制流 方式 最佳 对象 什么 | 更新日期: 2023-09-27 18:21:44

我需要使一个对象静态地可用于:

(1) 运行程序的当前线程(2) 由该线程启动的所有线程(3) 该线程排队的所有线程池任务

我找到的一种方法是使用Thread.CurrentPrincipal.Identity上的ConditionalWeakTable,因为该对象(当设置时)似乎是由.NET框架适当地传递的。然而,我想知道(1)这种方法是否有任何局限性/问题?以及(2)是否有另一种更干净的方法来解决这个问题,这种方法已经内置在.NET框架中了?

什么';s是将对象附加到逻辑控制流的最佳方式

我发现最好的方法是使用"LogicalCallContext"。基本上,我维护一个静态的ConcurrentDictionary<Guid, MyObject>,并使用CallContext.Logical[Get|Set]Data("uniqueStringKey", guid);将guid与特定的逻辑控制流相关联。我发现这对手动创建的线程和线程池都能正常工作。