¿Cómo funciona el atributo [ThreadStatic]?
Puede pensar que el campo marcado con ThreadStatic está conectado a un subproceso y su duración es comparable a la duración de un subproceso.
Entonces, en pseudocódigo ThreadStatic
es similar (por semántica) a tener un valor clave adjunto a un hilo:
Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myvariable"] += 1;
pero la sintaxis es un poco más fácil:
class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;
¿Qué sucede si lo pones en un miembro no estático?
Creo que se ignora:
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);
}
Además, vale la pena mencionar que ThreadStatic
no requiere ningún mecanismo de sincronización en comparación con los campos estáticos normales (porque el estado no se comparte).