Подтвердить что ты не робот

Почему реализация Thread IDisposable не реализуется?

Я заметил, что System.Threading.Thread реализует финализатор, но не IDisposable. Рекомендуемая практика заключается в том, чтобы всегда реализовывать IDisposable при реализации финализатора. Джеффри Рихтер написал, что руководство "очень важно и должно всегда сопровождаться без исключения".

Итак, почему реализация Thread IDisposable не реализована? Похоже, что реализация IDisposable будет непереломным изменением, которое позволило бы детерминированную очистку ресурсов, подлежащих окончательной публикации Thread.

И связанный с этим вопрос: поскольку поток финализирован, мне нужно удерживать ссылки на выполняемые потоки, чтобы они не могли быть завершены во время выполнения?

4b9b3361

Ответ 1

Что бы избавиться от объекта Thread? "Ресурс" в этом случае имеет свою естественную очистку - финишную нить. Обратите внимание, что также отсутствует чувство собственности... в исполняемом потоке вы всегда можете использовать Thread.CurrentThread, поэтому только этот поток действительно сможет претендовать на какую-либо собственность.

В принципе, я думаю, что Thread - это немного необычный случай - есть время жизни для базового ресурса, но это не то, что должно быть очищено явно.

Ответ 2

Это, вероятно, потому, что вы не можете избавиться от потока. Вместо этого вы можете попросить его умереть с помощью Abort() или аналогичного.

Ответ 3

Это вопрос дизайна, поэтому любой, кто не участвовал в создании этого аспекта .NET, может только спекулировать. При этом это сообщение в блоге дает хороший результат:

... реализация IDisposable не будет иметь никакого значения, по крайней мере, в текущей реализации Thread. Я увеличил количество создаваемых потоков и количество обработчиков уменьшилось в какой-то момент, поэтому существует механизм их закрытия.

Нити естественно очищаются после себя, поэтому они не являются ресурсом, который нужно управлять в типичном смысле.