我需要使一个对象静态可用于:
(1)我的程序正在运行的当前线程 (2)该线程启动的所有线程 (3)该线程入队的所有线程池任务
我想到的一种方法是使用在Thread.CurrentPrincipal.Identity
上键入的ConditionalWeakTable,因为该对象(设置时)似乎是由.NET框架适当传递的。但是,我想知道(1)这种方法有任何限制/问题吗? (2)是否有另一种更清晰的方法来解决已经内置在.NET框架中的这个问题?
答案 0 :(得分:0)
我发现这样做的最好方法是使用“LogicalCallContext”。基本上,我维护一个静态ConcurrentDictionary<Guid, MyObject>
,并使用CallContext.Logical[Get|Set]Data("uniqueStringKey", guid);
将guid与特定的逻辑控制流相关联。我发现这对于手动创建的线程和线程池都能正常工作。