2009-05-15 7 views
49

Ich habe einen Code, wo ich ein Thread statische Objekt in C# verwenden.ThreadStatic Modifiziert mit statischen C#

[ThreadStatic] 
private DataContext connection 

Ich habe mich gefragt, in diesem Fall, was ist, wenn jede Änderung würde ich, wenn ich den statischen Modifikator auf dem Thread statischen Kontext zu setzen?

Mit der ersten würde es eine Kopie des Kontexts pro Instanz pro Thread geben, mit der anderen nur eine Kopie pro Thread?

+1

+1 für gute Frage außer Acht gelassen werden. Ich hätte nie darüber nachgedacht. –

+0

Danke für die Bearbeitung itsmatt! –

Antwort

53

Die ThreadStaticAttribute ist nur für statische Variablen wie MSDN points out vorgesehen. Wenn Sie es für eine Instanzvariable verwenden, vermute ich, dass es genau nichts bringt.

+1

Wer kennt keine Dokumentation, die die offizielle Richtlinie beschreibt, was sie tun soll? Wenn es auf diese Weise nicht verwendet werden soll, sollte das nicht zu einem Kompilierungsfehler führen, oder können Attribute keine Kompilierungsfehler verursachen? – Catskul

+6

Es wäre toll, wenn es sich um einen Compilerfehler handeln würde, weil ich gerade ein paar Stunden damit verbracht habe, einen mysteriösen Threading-Bug zu finden, der darauf zurückzuführen ist, dass [ThreadStatic] in einem Instanzfeld verwendet wurde und somit keine Effect ... –

+0

@romkyns gleich hier ... nur einen Fehler von [ThreadStatic] auf einem Instanzfeld verursacht genagelt. – chakrit

8

Im ersten Fall würde es wahrscheinlich ignoriert werden, während im zweiten Fall sind Sie richtig, eine Instanz pro Thread.

6

MSDN sagt:

Zeigt an, dass der Wert eines statischen Feld für jeden Thread eindeutig ist. So

Ich denke, man erster Fall ist falsch ... das Attribut wird wahrscheinlich

Verwandte Themen