Làm thế nào để thuộc tính [ThreadStatic] hoạt động?
Bạn có thể nghĩ rằng trường được đánh dấu bằng ThreadStatic được gắn vào một luồng và thời gian tồn tại của nó tương đương với tuổi thọ của một luồng.
Vì vậy, trong mã giả ThreadStatic
cũng tương tự (theo ngữ nghĩa) với việc có một giá trị khóa được gắn vào một luồng:
Thread.Current["MyClass.myVariable"] = 1;
Thread.Current["MyClass.myvariable"] += 1;
nhưng cú pháp chỉ dễ hơn một chút:
class MyClass {
[ThreadStatic]
static int myVariable;
}
// .. then
MyClass.myVariable = 1;
MyClass.myVariable += 1;
Điều gì xảy ra nếu bạn đặt nó trên một thành viên không tĩnh?
Tôi tin rằng nó bị bỏ qua:
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);
}
Ngoài ra, điều đáng nói là ThreadStatic
không yêu cầu bất kỳ cơ chế đồng bộ hóa nào so với các trường tĩnh thông thường (vì trạng thái không được chia sẻ).