Я пытаюсь решить странную проблему с SL на Mac в многопоточном приложении. Мое приложение использует ThreadPool для постановки в очередь различных рабочих элементов. У меня есть метод HandleRequest
, который вызывается только через ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest))
.
Приложение работало очень медленно, поэтому я удаленно отладил из Windows и приостановил его, чтобы найти группу потоков, застрявших в HandleRequest, поскольку они ожидали на ограниченном ресурсе. Это нормально, поскольку есть еще одна проблема, но я также заметил, что в основном потоке ожидал запрос HandleRequest. Как это может случиться? Я думал, что ThreadPool создает рабочие потоки в фоновом режиме и выполняет задачи над ними.
Это происходит из-за того, что ThreadPool исчерпал рабочие потоки и, таким образом, использует вызывающий поток, чтобы попытаться выполнить метод обратного вызова?