Это невозможно по следующей причине. Цитата из MSDN :
У ThreadId операционной системы нет фиксированное отношение к управляемому поток, потому что неуправляемый хост может контролировать отношения между управляемые и неуправляемые потоки. В частности, опытный хост может используйте API хостинга CLR для планирования много управляемых потоков против одного и того же поток операционной системы, или переместить управляемый поток между разными потоки операционной системы.
Таким образом, нет однозначного соответствия между управляемыми потоками и потоками ОС.
Итак, теперь возникает вопрос, как получить список всех управляемых потоков, выполняемых в текущий момент в текущем процессе? К сожалению, я не знаю ответа.
Похоже, это невозможно.
К счастью для нас, у нас есть собственные библиотеки потоков, которые обертывают библиотеки .NET, и я смог добавить функциональность для хранения списка активных потоков, которые мы можем использовать для этой диагностики.
Это работает достаточно хорошо, но, конечно, потребовалось немало усилий и тестирования, но, надеюсь, мы разберемся с этим.