c#使用ThreadStaticAttribute

时间:2016-12-19 16:34:14

标签: c# multithreading

我一直在阅读ThreadStatic属性(https://msdn.microsoft.com/en-us/library/system.threadstaticattribute(v=vs.110).aspx)。

据我所知,它充当一个静态变量,每个线程保存一个静态值,因此每个线程在该静态变量中应该有不同的值。但也许我想念它。

我写了以下测试代码:

public class Program
{
    public static void Main(string[] args)
    {
        Parallel.For(0, 10, index =>
        {
            MyTest test = new MyTest();
            test.Increase();

            Console.WriteLine(test.MyStaticVar);
        });

        Console.ReadLine();
    }
}

public class MyTest
{
    [ThreadStatic]
    private static int _myStaticVar;

    public int MyStaticVar => _myStaticVar;

    public void Increase()
    {
        _myStaticVar++;
    }
}

我所期望的只是“1”的输出 - 因为每个静态变量都属于不同的线程。

我实际得到的是这样的:

1
1
1
2
3
4
2
2
1
1

我看到一些1,但也增加了 - 所以我猜我在测试实现中遗漏了一些东西,或者我对这个属性有些误解。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您假设您的Parallel正在生成一个新线程。它没有。并行只是说"如果你需要一个新的线程,并且有资源这样做,那就是#34;"

如果您绝对需要新线程,请使用线程库创建一个。