0

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

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

我想出的一种方法是使用 ConditionalWeakTable keyed on Thread.CurrentPrincipal.Identity,因为该对象(设置时)似乎由 .NET 框架适当地传递。但是,我想知道(1)这种方法有什么限制/问题吗?(2) 是否有另一种更简洁的方法来解决已经内置于 .NET 框架中的这个问题?

4

1 回答 1

0

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

于 2013-08-08T12:46:34.900 回答