Como o atributo [ThreadStatic] funciona?
Você pode pensar que o campo marcado com ThreadStatic está anexado a um encadeamento e seu tempo de vida é comparável ao tempo de vida de um encadeamento.
Portanto, no pseudocódigo ThreadStatic
é semelhante (por semântica) a ter um valor-chave anexado a um thread:
Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myvariable"] += 1;
mas a sintaxe é um pouco mais fácil:
class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;
o que acontece se você colocá-lo em um membro não estático?
Eu acredito que é ignorado:
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);
}
Além disso, vale ressaltar que ThreadStatic
não requer nenhum mecanismo de sincronização em comparação com os campos estáticos normais (porque o estado não é compartilhado).