将对象附加到逻辑控制流的最佳方法是什么?



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

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

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

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

相关内容

最新更新