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

C# 什么';将对象附加到逻辑控制流的最佳方式是什么?,c#,multithreading,iidentity,C#,Multithreading,Iidentity,我需要使对象静态地可用于: (1) 运行程序的当前线程 (2) 由该线程启动的所有线程 (3) 由该线程排队的所有线程池任务 我想出的一种方法是在Thread.CurrentPrincipal.Identity上键入一个ConditionalWeakTable,因为该对象(设置时)似乎是由.NET framework适当传递的。然而,我想知道(1)这种方法是否有任何限制/问题?(2)有没有另一种更干净的方法来解决这个问题,它已经内置在.NET framework中了?我发现最好的方法是使用“Lo

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

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


我想出的一种方法是在
Thread.CurrentPrincipal.Identity
上键入一个ConditionalWeakTable,因为该对象(设置时)似乎是由.NET framework适当传递的。然而,我想知道(1)这种方法是否有任何限制/问题?(2)有没有另一种更干净的方法来解决这个问题,它已经内置在.NET framework中了?

我发现最好的方法是使用“LogicalCallContext”。基本上,我维护一个静态的
ConcurrentDictionary
,并使用
CallContext.Logical[Get | Set]数据(“uniqueStringKey”,guid)
将guid与特定逻辑控制流关联。我发现这可以正确地处理手动创建的线程和线程池