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

时间:2013-07-10 12:56:45

标签: c# multithreading iidentity

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

(1)我的程序正在运行的当前线程 (2)该线程启动的所有线程 (3)该线程入队的所有线程池任务

我想到的一种方法是使用在Thread.CurrentPrincipal.Identity上键入的ConditionalWeakTable,因为该对象(设置时)似乎是由.NET框架适当传递的。但是,我想知道(1)这种方法有任何限制/问题吗? (2)是否有另一种更清晰的方法来解决已经内置在.NET框架中的这个问题?

1 个答案:

答案 0 :(得分:0)

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