一:背景
1. 讲故事
有朋友在微信里面问我,为什么用 ThreadStatic
标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类似疑问的朋友解个惑吧。
二:为什么值不一样
1. 问题复现
为了方便讲述,定义一个 ThreadStatic 的变量,然后用多个线程去访问,参考代码如下:
internal class Program
{
[ThreadStatic]
public static int num = 10;
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
/// <summary>
/// 1. 特性方式
/// </summary>
static void Test()
{
var t1 = new Thread(() =>
{
Debugger.Break();
var j