2016-12-19 1 views
0

Ich habe über das ThreadStatic Attribut (https://msdn.microsoft.com/en-us/library/system.threadstaticattribute(v=vs.110).aspx) gelesen.C# Verwendung von ThreadStaticAttribute

Soweit ich verstanden habe, handelt es sich um eine statische Variable, die einen statischen Wert pro Thread enthält. Daher sollte jeder Thread in dieser statischen Variable einen anderen Wert haben. Aber vielleicht vermisse ich es, es zu verstehen.

Ich schrieb den folgenden Testcode:

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++; 
    } 
} 

Was ich nur eine Ausgabe von „1“ zu erwarten war - da jede statische Variable zu einem anderen Thread gehört.

Was actualy ist ich so etwas wie dieses:

1 
1 
1 
2 
3 
4 
2 
2 
1 
1 

ich einige 1 sehen, sondern auch erhöht - so vermute ich mir fehlt in meinem Test-Implementierung etwas aus oder ich etwas Missverständnis über dieses Attribut.

Was fehlt mir hier?

Antwort

2

Sie gehen davon aus, dass Ihre Parallele einen neuen Thread generiert. Es tut es nicht. Parallel sagt nur das Äquivalent von "mache einen neuen Thread, wenn du einen brauchst und die Ressourcen dafür hast."

Wenn Sie unbedingt einen neuen Thread benötigen, erstellen Sie einen mit der Threading-Bibliothek.