[ThreadStatic]
属性如何工作?我假设编译器会发出一些 IL 来填充/检索 TLS 中的值,但查看反汇编时它似乎并没有在那个级别执行它。
作为后续,如果你把它放在一个非静态成员上会发生什么?我们让开发人员犯了这个错误,编译器甚至没有发出警告。
更新
此处回答的第二个问题:ThreadStatic Modified with Static C#
最佳答案
How does [ThreadStatic] attribute work?
你可以认为标有ThreadStatic的字段附加到一个线程,它的生命周期与线程的生命周期相当。
因此在伪代码中,ThreadStatic
类似于(在语义上)将键值附加到线程:
Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myVariable"] += 1;
但语法更简单:
class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;
what happens if you put it on a non-static member?
我相信它被忽略了:
class A {
[ThreadStatic]
public int a;
}
[Test]
public void Try() {
var a1 = new A();
var a2 = new A();
a1.a = 5;
a2.a = 10;
a1.a.Should().Be.EqualTo(5);
a2.a.Should().Be.EqualTo(10);
}
另外值得一提的是,与普通静态字段相比,ThreadStatic
不需要任何同步机制(因为状态不共享)。
关于c# - ThreadStatic 属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227676/