Почему Thread не реализует IDisposable? - PullRequest
10 голосов
/ 11 ноября 2009

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

Так почему же Thread не реализует IDisposable? Кажется, что реализация IDisposable была бы неразрывным изменением, которое позволило бы детерминированную очистку финализируемых ресурсов Thread.

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

Ответы [ 3 ]

8 голосов
/ 11 ноября 2009

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

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

3 голосов
/ 11 ноября 2009

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

1 голос
/ 11 ноября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...