Я заметил, что System.Threading.Thread реализует финализатор, но не IDisposable. Рекомендуемая практика заключается в том, чтобы всегда реализовывать IDisposable при реализации финализатора. Джеффри Рихтер wrote, что руководство является «очень важным и всегда следует без исключения».Почему реализация Thread IDisposable не используется?
Так почему же реализация Thread IDisposable? Похоже, что реализация IDisposable была бы непрекращающимся изменением, которое позволило бы детерминированную очистку конечных ресурсов Thread.
И связанный с этим вопрос: поскольку поток финализирован, нужно ли удерживать ссылки на выполняемые потоки, чтобы они не были завершены во время выполнения?
Поскольку ManagedThreadID является целым числом и может быть прочитан даже до начала потока, это предполагает, что что-то выделяется при создании потока (даже если это только номер). Хотя для приложения было бы странно создавать 2 + миллиард объектов Threads, казалось бы, идентификаторы будут ресурсом, который может быть достоин релиза. – supercat
@supercat: Интересный момент. «ManagedThreadId», по-видимому, распределяется последовательно - я не знаю, что произойдет после того, как вы создали более 2 миллиардов из них. –
Иды, кажется, используются повторно, когда объекты Thread становятся доступными для завершения, поэтому я подозреваю, что Threading.Thread реализует Finalize, но не IDIsposable. – supercat