是的,C# ThreadLocal
可以用于靜態字段。ThreadLocal<T>
類允許您為每個線程存儲一個獨立的值副本。當您將 ThreadLocal<T>
應用于靜態字段時,每個線程都將具有其自己的靜態字段副本。
以下是一個使用 ThreadLocal<T>
的靜態字段的示例:
using System;
using System.Threading;
public class MyClass
{
// 使用 ThreadLocal<T> 靜態字段
private static readonly ThreadLocal<int> _threadLocalValue = new ThreadLocal<int>();
public static void SetValue(int value)
{
_threadLocalValue.Value = value;
}
public static int GetValue()
{
return _threadLocalValue.Value;
}
}
class Program
{
static void Main(string[] args)
{
// 設置線程局部變量的值
MyClass.SetValue(10);
// 在同一線程中獲取值
Console.WriteLine("Main thread value: " + MyClass.GetValue());
// 創建一個新線程
Thread newThread = new Thread(() =>
{
// 在新線程中設置值
MyClass.SetValue(20);
// 在新線程中獲取值
Console.WriteLine("New thread value: " + MyClass.GetValue());
});
newThread.Start();
newThread.Join();
}
}
輸出:
Main thread value: 10
New thread value: 20
在這個示例中,我們有一個名為 MyClass
的類,它具有一個靜態 ThreadLocal<int>
字段 _threadLocalValue
。我們提供了 SetValue
和 GetValue
方法來設置和獲取線程局部變量的值。在 Main
方法中,我們設置了一個值并在同一線程中獲取它。然后我們創建了一個新線程,在該線程中設置了另一個值并獲取了它。請注意,每個線程都有其自己的 _threadLocalValue
副本,因此主線程和新線程中的值是獨立的。