从ProcessThread到托管线程

Big*_*toe 9 c# multithreading diagnostics

在我们无法重现的生产环境中,我们会定期关闭Windows服务.可能需要几个月才能再次发生.

我正在进行一些诊断尝试并帮助解决这个问题,我正在考虑的一件事是在我们开始关闭应用程序后将事件添加到系统线程池60秒.我们的应用程序应在10秒内完全关闭.

在这种情况下,我想跟踪进程的剩余运行线程到事件日志.

我可以使用System.Diagnostics.Process.GetCurrentProcess.Threads获取正在运行的线程.这些线程对象具有本机Win32线程ID等.

我想知道是否有任何方法可以从这些线程ID返回到它们在当前进程中表示的任何托管线程.我试图这样做的原因是因为我们的线程池和其他线程产生了我们给出了代表它们的目的的名称,它真的有助于把它们拿回来.

Dar*_*rov 12

由于以下原因,这是不可能的.从MSDN引用:

操作系统ThreadId与托管线程没有固定的关系,因为非托管主机可以控制托管和非托管线程之间的关系.具体而言,复杂的主机可以使用CLR Hosting API针对同一操作系统线程调度许多托管线程,或者在不同操作系统线程之间移动托管线程.

因此,托管线程和OS线程之间没有一对一的映射.

那么现在的问题是,如何获取当前进程中当前运行的所有托管线程的列表?不幸的是我不知道答案.