Недостаточно свободных потоков в ThreadPool для завершения сообщения об операции - PullRequest
1 голос
/ 24 мая 2019

Я начал получать это исключение в моем приложении. Я взял дамп и вот как выглядит пул потоков:

0:014> !threadpool
CPU utilization: 81%
Worker Thread: Total: 1000 Running: 4 Idle: 996 MaxLimit: 1000 MinLimit: 1000
Work Request in Queue: 0
--------------------------------------
Number of Timers: 1
--------------------------------------
Completion Port Thread:Total: 32 Free: 31 MaxFree: 8 CurrentLimit: 32 MaxLimit: 1000 MinLimit: 1000

Эти 996 свободных потоков имеют похожий стек вызовов, который выглядит следующим образом:

ntdll!NtWaitForSingleObject+0x14
KERNELBASE!WaitForSingleObjectEx+0x8f
clr!CLRSemaphore::Wait+0x8a
clr!ThreadpoolMgr::UnfairSemaphore::Wait+0x115
clr!ThreadpoolMgr::WorkerThreadStart+0x28b
clr!Thread::intermediateThreadProc+0x86
kernel32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21

Если все эти незанятые потоки ожидают выполнения работы, то почему я получил исключение «Недостаточно свободных потоков в ThreadPool для завершения сообщения операции»?

...