Zauważyłem, że System.Threading.Thread implementuje finalizator, ale nie może go identyfikować. Zalecaną praktyką jest zawsze wdrażanie IDisposable po zaimplementowaniu finalizatora. Jeffrey Richter, że wytyczne są "bardzo ważne i zawsze powinny być przestrzegane bez wyjątku".Dlaczego wątek nie implementuje IDisposable?
Dlaczego więc wątek nie implementuje IDisposable? Wygląda na to, że implementacja IDisposable byłaby niezłamaną zmianą, która pozwoliłaby na deterministyczne oczyszczenie z możliwych do sfinalizowania zasobów Thread.
I powiązane pytanie: ponieważ wątek jest finalizowany, czy muszę przechowywać odniesienia do uruchomionych wątków, aby zapobiec ich sfinalizowaniu podczas wykonywania?
Ponieważ ManagedThreadID jest liczbą całkowitą i można go odczytać nawet przed uruchomieniem wątku, sugerowałoby to, że coś zostało przydzielone, gdy wątek zostanie utworzony (nawet jeśli tylko sam numer). Chociaż byłoby dziwne, że aplikacja tworzy 2 + miliardy obiektów Threads, wydaje się, że identyfikatory byłyby zasobem, który mógłby być wart wydania. – supercat
@supercat: Interesujący punkt. "ManagedThreadId" wydaje się być przydzielane sekwencyjnie - nie wiem, co by się stało po utworzeniu ponad 2 miliardy z nich. –
Identyfikatory wydają się być ponownie używane, gdy obiekty wątku kwalifikują się do sfinalizowania, więc podejrzewam, że wątek Threading.Thread implementuje finalizację, ale nie umożliwia IDIspozycji. – supercat