我有一个 .NET (C#) 多线程应用程序,我想知道某个方法是否在 Finalizer 线程内运行。
我尝试过使用 Thread.CurrentThread.Name 但它不起作用(返回 null)。
有人知道如何查询当前线程以发现它是否是 Finalizer 线程吗?
识别线程的最佳方法是通过其托管 ID:
Thread.CurrentThread.ManagedThreadId;
由于终结器始终在 GC 的线程中运行,因此您可以创建一个终结器,它将线程 id(或线程对象)保存在静态变量中。
Sample:
public class ThreadTest {
public static Thread GCThread;
~ThreadTest() {
ThreadTest.GCThread = Thread.CurrentThread;
}
}
在您的代码中只需创建此类的实例并进行垃圾收集:
public static void Main() {
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)