2016-12-19 12 views
0

私はThreadStatic属性(https://msdn.microsoft.com/en-us/library/system.threadstaticattribute(v=vs.110).aspx)について読んできました。c#ThreadStaticAttributeの使用

私が理解する限り、スレッドごとに静的な値を保持する静的変数として機能するので、各スレッドはその静的変数に異なる値を持つ必要があります。しかし、私はそれを理解していないかもしれない。私は次のテストコードを書いた

:私が期待したもの

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」の出力だった - 各静的変数は別のスレッドに属しているため。私はactualy何を得る

はこのようなものです:

1 
1 
1 
2 
3 
4 
2 
2 
1 
1 

私はいくつかの1年代参照するだけでなく、インクリメント - ので、私は私のテスト実装のうち何かが欠けていたり、私が何かを誤解しています推測していますこの属性について

私はここで何が欠けていますか?

答えて

2

Parallelが新しいスレッドを生成しているとします。それはしません。 Parallelは、「必要な場合は新しいスレッドを作成し、そうするためのリソースがある」と同等のことを言います。

新しいスレッドが絶対に必要な場合は、スレッドライブラリを使用してスレッドを作成します。