2015-11-02 4 views

ответ

1

Существует уже здесь ответ - Is it true that for long running processes it is better to do thread manually instead of threadpool?

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

Мое эмпирическое правило состоит в том, что операция может занимать больше секунды, а не должно быть в потоке пула потоков. Вероятно, это довольно долго.

Хотя это недокументировано, если вы запустите задачу с TaskCreationOptions.LongRunning, тогда будет запущен новый поток, который будет запущен до .

Для большинства задач ввода-вывода существуют асинхронные версии фреймворков , которые вы действительно должны использовать. Они используют функции ядра и означают, что вы не будете блокировать нить.

Как всегда, я рекомендую прочитать бесплатную электронную книгу Джо Альбахари, за которой следует Совместное программирование Джо Даффи в Windows. Позднее 1000 страниц длинный, но полон полезных деталей.

0

Хотя использование потоков дает возможность сделать больше, каждый поток занимает часть вашего процессора и немного больше памяти. Если у вас есть поток для долговременной задачи, у него есть потенциал для того, чтобы threadpool мог занять этот поток на короткое время, чтобы предоставить место для других задач \ threads.

Лучше разделите этот поток на меньшие задачи, используя задачи async, и подождите, подождите, и другие параметры.

Эта ссылка здесь должна помочь вам немного дальше

Tasks, Await, Await All...

Смежные вопросы