Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > ThreadPool


Автор: Lexicss 29.1.2009, 18:36
При запуске метода в отдельном потоке средствами ThreadPool, поток выполняется в "фоновом" плане. Однако этот статус можно изменить, если свойстыу IsBackground текущего потока присвоить значение false. 
Об этом ещё упомянуто в книжке Microsoft .NET в подлиннике @ А.Дубовцев [2004]. 
Проверив эту ситуацию на практике в этом и убедился. 

Однако, в книжке C-SHARP 2008 - ускоренный курс для профессионалов @ Т.Нэш [2008] автор настоятельно советует никогда не менять статус IsBackground из пула в текущем потоке, в противном случае это никакого эффекта не даст. 

Кому верить? Действительно, ли гражданин Т. Нэш прав? На практике то вроде как эффект в этом есть. Или я чего-то не знаю(.NET начал интенсивно изучать лишь в этом году)?

В MSDN про эту ситуацию ничего не нашёл.

Кто что умного подскажет у кого есть опыт в этом деле?
Заранее благодарен.

Автор: mihryak 29.1.2009, 22:26
что-то ты странное прочитал в обоих книжках и в мсдн
Цитата
Поток является либо фоновым, либо основным. Фоновые потоки идентичны основным за тем исключением, что фоновые потоки не предотвращают завершение процесса. Поскольку все основные потоки, принадлежащие процессу, завершились, общеязыковая среда выполнения завершает процесс. Все оставшиеся фоновые потоки останавливаются и не завершаются.


вот и всё различие
не вижу причин отказываться от использования

Добавлено через 5 минут и 32 секунды
Цитата(Lexicss @  29.1.2009,  19:36 Найти цитируемый пост)
При запуске метода в отдельном потоке средствами ThreadPool,

через QueueUserWorkItem?

Автор: archeg 30.1.2009, 00:38
Ну потоки с пула не закрываються никогда, поэтому я бы не стал бы их делать не бекграундными. В остальном mihryak, прав

Автор: PashaPash 30.1.2009, 01:56
archeg, опыт показал что .net выставляет IsBackground=true при возврате потока в пул.

Автор: WarHog 30.1.2009, 09:23
Цитата(archeg @ 30.1.2009,  00:38)
Ну потоки с пула не закрываються никогда

archeg, почему же?

"When a thread pool thread suspends itself, it waits for 40 seconds. If 40 seconds elapses and the thread is given nothing to do, then the thread wakes up and destroys itself, freeing all the OS resources (stack, kernel object, and so forth) that it was using."

Автор: Lexicss 30.1.2009, 18:10
mihryak, 
Цитата
через QueueUserWorkItem?

Да.

Тут надо принять решение пользоваться ли встроенным тредпулом или нет, однако нужно чтобы потоки работали в фореграунде, а когда в литературе наткнулся на это сообщение вот и возник вопрос.  smile 
Моё приложение планируется использовать и на Линуксе. Может тут в кросплатфореннсти может быть не состыковка?

Автор: mihryak 30.1.2009, 22:00
Цитата(Lexicss @  30.1.2009,  19:10 Найти цитируемый пост)
Моё приложение планируется использовать и на Линуксе. Может тут в кросплатфореннсти может быть не состыковка? 

запросто, работа тредпула определяется рантаймом, т.е. как реализуют в моно - так и будет
он и так слабо документирован и в вин-реализации

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)