Периодически мы зависаем при отключении службы Windows в производственной среде, которую мы просто не можем воспроизвести. Могут пройти месяцы, прежде чем это случится снова.
Я добавляю некоторую диагностику, чтобы попытаться помочь с этой проблемой, одна вещь, на которую я смотрю, - это добавление события в пул системных потоков на 60 секунд после того, как мы инициируем завершение работы приложения. Наше приложение должно быть чисто выключено в течение 10 секунд максимума.
В этом случае я хотел бы отследить оставшиеся запущенные потоки процесса в журнале событий.
Я могу получить работающие потоки, используя System.Diagnostics.Process.GetCurrentProcess.Threads. Эти объекты потоков имеют собственные идентификаторы потоков Win32 и т. Д.
Мне было интересно, есть ли какой-нибудь способ вернуться от идентификаторов этих потоков к любым управляемым потокам, которые они представляют в текущем процессе.
Причина, по которой я пытаюсь это сделать, заключается в том, что для наших пулов потоков и других потоков, которые мы порождаем, мы даем имена, представляющие их назначение, и это действительно поможет вернуть их обратно.