แอตทริบิวต์ [ThreadStatic] ทำงานอย่างไร
คุณสามารถคิดได้ว่าฟิลด์ที่มีการทำเครื่องหมายด้วยThreadStaticนั้นเชื่อมต่อกับเธรดและอายุการใช้งานนั้นเทียบได้กับอายุการใช้งานของเธรด
ดังนั้นใน pseudocode ThreadStatic
จะคล้ายกัน (โดยซีแมนทิกส์) กับการมีคีย์ - ค่าที่แนบมากับเธรด:
Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myvariable"] += 1;
แต่ไวยากรณ์นั้นง่ายขึ้นอีกเล็กน้อย:
class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;
จะเกิดอะไรขึ้นถ้าคุณใส่สมาชิกที่ไม่คงที่
ฉันเชื่อว่ามันถูกละเว้น:
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
ไม่ต้องการกลไกการซิงโครไนซ์ใด ๆ เมื่อเปรียบเทียบกับฟิลด์สแตติกทั่วไป (เนื่องจากสถานะไม่ได้ถูกแชร์)