用静态C#修改ThreadStatic

Ant*_*y D 51 c# static thread-static

我有一些代码,我在C#中使用线程静态对象.

[ThreadStatic]
private DataContext connection 
Run Code Online (Sandbox Code Playgroud)

我想知道,在这种情况下,如果我将静态修饰符放在线程静态上下文中,我会得到什么改变?

[ThreadStatic]
private static DataContext connection 
Run Code Online (Sandbox Code Playgroud)

第一个是每个线程每个实例有一个上下文副本,每个线程只有一个副本吗?

Nol*_*rin 56

ThreadStaticAttribute被设计为只对静态变量使用,如MSDN指出.如果你在实例变量上使用它,我怀疑它什么都不会.

  • 如果它是一个编译器错误会很棒,因为我只花了几个小时来跟踪一个神秘的与线程相关的错误,结果是由于[ThreadStatic]在实例字段上使用而没有效果... (7认同)
  • 请记住,ThreadPool可以跨多个任务共享线程(和ThreadStatic).您希望确保正在运行的并行任务未在ThreadPool的线程中运行. (4认同)
  • 任何人都知道任何描述官方政策的文件应该做什么?如果不应该以这种方式使用它是否应该导致编译错误,或者属性不会导致编译错误? (2认同)

Otá*_*cio 8

在第一种情况下,它可能会被忽略,而在第二种情况下,你是正确的,每个线程一个实例.


Tho*_*que 6

MSDN说:

表示每个线程的静态字段值是唯一的.

所以我猜你的第一个案例是不正确的...该属性可能会被忽略