Ich habe festgestellt, dass System.Threading.Thread einen Finalizer implementiert, aber nicht IDisposable. Die empfohlene Vorgehensweise besteht darin, IDisposable immer dann zu implementieren, wenn ein Finalizer implementiert wird. Jeffrey Richter wrote dass die Richtlinie "sehr wichtig ist und immer ohne Ausnahme befolgt werden sollte".Warum implementiert Thread IDisposable nicht?
Warum also Thread IDisposable nicht implementieren? Es scheint, als wäre die Implementierung von IDisposable eine nicht brechende Änderung, die eine deterministische Bereinigung der finalisierbaren Ressourcen von Thread ermöglichen würde.
Und eine verwandte Frage: Da Thread finalisierbar ist, muss ich Referenzen auf laufende Threads halten, um zu verhindern, dass sie während der Ausführung abgeschlossen werden?
Da ManagedThreadID eine ganze Zahl ist und gelesen werden kann, noch bevor ein Thread gestartet wird, würde das bedeuten, dass etwas zugewiesen wird, wenn ein Thread erstellt wird (selbst wenn nur die Nummer selbst). Während es für eine Anwendung seltsam wäre, 2 + Milliarden Threads-Objekte zu erzeugen, würde es scheinen, dass die Ids eine Ressource wären, die es wert wäre, freigegeben zu werden. – supercat
@supercat: Interessanter Punkt. 'ManagedThreadId' scheint sequenziell zugewiesen zu werden - ich weiß nicht, was passieren würde, nachdem Sie mehr als 2 Milliarden davon erstellt haben. –
Die ids scheinen wiederverwendet zu werden, wenn Thread-Objekte für die Finalisierung in Frage kommen. Daher vermute ich Threading.Thread implementiert Finalize, aber nicht IDIsposable. – supercat