Если задание создается с использованием параметра LongRunning, есть ли побочные эффекты, так как они не используют ThreadPool
Задача LongRunning побочные эффекты?
Ответ 1
Да. Побочным эффектом является то, что: если у вас есть миллион задач, вы можете создать миллион потоков.
Необходимо учитывать, что каждый поток будет иметь свои служебные данные и . Накладные расходы памяти не такие маленькие, мы говорим несколько MB здесь, даже с тысячами предметов, вы можете столкнуться с проблемами.
Ответ 2
Параметр LongRunning
является подсказкой для планировщика, что означает, что он может выбрать выполнение Task
в потоке без ThreadPool (если это будет пул потоков, поддерживаемый DefaultScheduler
, он, скорее всего, будет). Один побочный эффект параметра LongRunning
заключается в том, что для этой задачи запрещена задача Inlining. Это означает, что если LongRunning
Задача создает другие вложенные или дочерние задачи и вызовы Wait
для любой из этих задач, они всегда будут выполняться на другом потоке, а не быть вложенным (т.е. работать на том же потоке, выполняющем Wait
).
В контексте ответов других людей стоит отметить, что при создании большого количества задач, которые занимают много времени, чтобы завершить без, подсказка LongRunning
все еще может вызвать эскалацию числа потоков из-за алгоритма впрыска резьбы, который использует DefaultScheduler
. Алгоритм не различает потоки в пуле, которые заблокированы, и те, которые работали с рабочим элементом в течение длительного времени, и в обоих случаях могут ответить, введя больше потоков в пул, чтобы попытаться увеличить рабочую пропускную способность.
Ответ 3
Задачи LongRunning указывают, что глобальные и локальные очереди будут обходить, чтобы предотвратить блокирование других потоков, следующих за ним в локальной очереди.
Это означает, что если у вас много заданий Long Running, это может создать больше потоков, чем обычно.
В ответах на этот вопрос вы можете увидеть некоторые из недостатков: