Die ThreadStatic attribute deklariert eine statische Variable als eindeutig pro Thread. Kennen Sie ein einfaches Muster, um solche Variablen korrekt zu entsorgen?Deterministische Entsorgung von ThreadStatic-Objekten
Was wir vor ThreadStatic verwendet haben, ist ein ThreadContextManager. Jedem Thread wurde ein ThreadContext zugewiesen, der alle Thread-spezifischen Informationen enthielt. Wir haben einige Threads erzeugt und lassen sie arbeiten. Dann, als alle fertig waren, entsorgten wir den ThreadContentManager, der wiederum alle Kontexte entsorgte, wenn sie IDisposable waren.
Ich sehe keine sofortige Möglichkeit, dieses Muster in ThreadStatic-Objekte zu übersetzen. Die Objekte werden schließlich entsorgt, weil die Threads absterben und somit nichts darauf Bezug nimmt. Wir bevorzugen jedoch, wenn möglich, deterministische Entsorgung.
aktualisieren
ich nicht kontrollieren wirklich die Fäden direkt - Ich bin mit Microsoft CCR, die eine Threadpool hat, die Aufgaben der Fall ist. Wenn alle Aufgaben erledigt sind, entsorge ich den Dispatcher (der den Threadpool enthält). Die Sache ist - ich habe am Ende der Hauptfunktion eines Threads keine Chance etwas zu tun - so kann ich die Dinge am Ende des Laufs eines Threads nicht manuell erledigen. Kann ich irgendwie auf die statischen Objekte des Threads von außerhalb des Threads zugreifen?
Ich möchte nicht nach jeder Aufgabe aufräumen. Ein beliebiger Thread in meinem Threadpool führt sequentiell viele Aufgaben aus. Der Grund für den Kontext besteht darin, eine teure Zuweisung von Datenstrukturen pro Task zu sparen. Das bedeutet, dass ich erst nach Abschluss aller Threads aufräumen kann. – ripper234