Пул потоков и .IsBackground в .NET - PullRequest
7 голосов
/ 05 сентября 2010

MSDN, как и многие другие источники, утверждают, что рабочие потоки в пуле потоков всегда являются фоновыми.

"Потоки пула потоков являются фоновыми потоками".(MSDN)

"Объединенные потоки всегда являются фоновыми."(Потоки в C #, Джозеф Альбахари)

Я могу легко сделать рабочий поток не фоновым, установив

Thread.CurrentThread.IsBackground = false;

И приложение будет ожидать окончания потока.1012 *

Что с этим не так?

Ответы [ 3 ]

12 голосов
/ 05 сентября 2010

Да, вы можете изменить их. Но вы не должны .

По тем же причинам вы не перекрашиваете взятый в аренду автомобиль. То же самое для других свойств потока, таких как приоритет и MTA.

Если вам нужен другой вид темы, создайте свою.

6 голосов
/ 05 сентября 2010

Когда заканчивается нить? Когда ваш метод заканчивается? Я очень сомневаюсь, что это так. Весь смысл пула потоков состоит в том, что, как только ваш поток закончен, он возвращается в пул для повторного использования. Теперь вы отпустили поток, он вернулся в пул потоков, и ваше приложение все еще работает, потому что это приоритетный поток. Нет способа вернуть эту нить, чтобы убить ее.

4 голосов
/ 05 сентября 2010

Пулы потоков - это фоновые темы

Завершите это предложение словами "у них свойство IsBackground инициализировано как True, в отличие от потоков, созданных с помощью класса Thread."

Установка в false может быть немного рискованной. Потоки потоков перерабатываются, я не уверен, что свойство будет повторно инициализировано. Это не свойство, связанное с физическим потоком операционной системы, у них нет поведения IsBackground, оно добавляется оболочкой, которую CLR помещает вокруг него. Так что, вероятно, да. Впрочем, мало причин возиться с этим.

...