Я использую специальный инструмент для проверки своего приложения. Как только приложение достигает точки останова, я могу вызвать свой инструмент из окна Immediate, вызвав определенную функцию. Сам инструмент представляет собой многопоточное приложение для Windows и поэтому порождает некоторые задачи.
Проблема, с которой я сталкиваюсь, заключается в том, что иногда некоторые задачи, запланированные с помощью инструмента, никогда не запускаются, что приводит к тому, что мой инструмент зависает на неопределенный срок. Я создаю задачи с ThreadPool.QueueUserWorkItem
или с Task.Run
, и они оба приводят к зависанию инструмента и никогда не выполняют эти задачи. Если вместо этого я использую класс Thread
, инструмент работает отлично.
Кроме того, инструмент работает (с задачами), если он запускается нормально, то есть не из окна немедленного запуска. Поэтому проблема возникает только в том случае, если я использую «Задачи» и «Немедленное окно».
Таким образом, мой вопрос в том, что может быть причиной того, что некоторые задачи никогда не выполняются? Я понимаю, что Immediate Window блокирует все остальные потоки и выполняет команду в потоке, который попал в точку останова, но потоки/задачи, порожденные потоком Immediate Window, должны по-прежнему выполняться, верно?
И мое приложение, и инструмент написаны на С#. Я использую Visual Studio Professional 2015 Update 1.