我一直在阅读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,但也增加了 - 所以我猜我在测试实现中遗漏了一些东西,或者我对这个属性有些误解。
我在这里缺少什么?
答案 0 :(得分:2)
您假设您的Parallel正在生成一个新线程。它没有。并行只是说"如果你需要一个新的线程,并且有资源这样做,那就是#34;"
如果您绝对需要新线程,请使用线程库创建一个。