.net NET中是否有内置功能来创建线程绑定变量?

.net NET中是否有内置功能来创建线程绑定变量?,.net,multithreading,scope,transactionscope,named-scope,.net,Multithreading,Scope,Transactionscope,Named Scope,有没有办法做到这一点(psedo代码): 然后稍后再重试 RefObject[] refObjs = GetCurrentThread().Items; 并列举对象。显然,这两个调用都将在同一个线程的生命周期内发生 基本的想法是,我可以很容易地识别当前线程的项目,它们实际上是在这个线程中创建的。这与使用ASP.NET请求的Page.Request对象相同-您知道它在工作进程中非常独特,因此不会与同时提供的其他请求混淆。我想把一个线程当作页面。Request-它来了又走,但是当它还活着的时候,我

有没有办法做到这一点(psedo代码):

然后稍后再重试

RefObject[] refObjs = GetCurrentThread().Items;
并列举对象。显然,这两个调用都将在同一个线程的生命周期内发生

基本的想法是,我可以很容易地识别当前线程的项目,它们实际上是在这个线程中创建的。这与使用ASP.NET请求的
Page.Request
对象相同-您知道它在工作进程中非常独特,因此不会与同时提供的其他请求混淆。我想把一个线程当作
页面。Request
-它来了又走,但是当它还活着的时候,我可以随意查询它,而不必关心这个过程中存在的其他威胁

我曾经做过类似的事情,但更多的是通过引用封送对象进行模拟。我可以想出更多的方法,但是我真的不想自己手动存储线程和对象之间的映射。中的线程是否有类似于TransactionScope的东西?我对处理同步化的困难和避免比赛条件不太感兴趣


PS:如果这不可用,我至少可以在没有静态变量的情况下这样做吗?

有一个属性可以放在静态字段上。从那里,您可以构建所需的任何特定于线程的数据。但是,您将无法从另一个线程(例如,通过线程ID)访问数据。

除了
[ThreadStatic]
(已经提到)之外,.NET 4.0中还有一个-大致类似,但它是一个只读的线程特定存储,使用基于委托的初始化

虽然值本身是只读的,但这可能是对可变对象的引用,提供特定于线程的对象模型

一个优点:代码> thRead局部<代码>,它不必被绑定到静态字段——它可以被用于(例如)lambda主体的中间。但是,如果您不需要它,

[ThreadStatic]
更简单

RefObject[] refObjs = GetCurrentThread().Items;