当前位置:  开发笔记 > 编程语言 > 正文

如何识别GC终结器线程?

如何解决《如何识别GC终结器线程?》经验,为你挑选了1个好方法。

我有一个.NET(C#)多线程应用程序,我想知道某个方法是否在Finalizer线程内运行.

我已经尝试使用Thread.CurrentThread.Name但它不起作用(返回null).

任何人都知道如何查询当前线程以发现它是否是Finalizer线程?



1> Yona..:

识别线程的最佳方法是通过其托管ID:

Thread.CurrentThread.ManagedThreadId;

由于终结器总是在GC的线程中运行,因此您可以创建一个终结器,将线程id(或线程对象)保存在静态值中.

样品:

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);
}

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有