Ich benutze gerne die [ThreadStatic]
Attribut in Kombination mit Thread- und Stack-basierter Programmierung. Wenn ich z. B. einen Wert haben möchte, den ich mit dem Rest einer Aufrufsequenz teilen möchte, dies aber außerhalb des Bandes (d. h. außerhalb der Aufrufparameter) tun möchte, könnte ich etwas wie das Folgende verwenden.
class MyContextInformation : IDisposable {
[ThreadStatic] private static MyContextInformation current;
public static MyContextInformation Current {
get { return current; }
}
private MyContextInformation previous;
public MyContextInformation(Object myData) {
this.myData = myData;
previous = current;
current = this;
}
public void Dispose() {
current = previous;
}
}
Später in meinem Code kann ich dies nutzen, um Leuten, die meinem Code nachgeschaltet sind, kontextbezogene Informationen zu liefern. Beispiel:
using(new MyContextInformation(someInfoInContext)) {
...
}
Das ThreadStatic-Attribut ermöglicht es mir, den Aufruf nur auf den betreffenden Thread zu beschränken und so das unangenehme Problem des Datenzugriffs über mehrere Threads hinweg zu vermeiden.