Dro*_*per 7 .net multithreading finalizer
我有一个.NET(C#)多线程应用程序,我想知道某个方法是否在Finalizer线程内运行.
我已经尝试使用Thread.CurrentThread.Name但它不起作用(返回null).
任何人都知道如何查询当前线程以发现它是否是Finalizer线程?
Yon*_*ona 14
识别线程的最佳方法是通过其托管ID:
Thread.CurrentThread.ManagedThreadId;
Run Code Online (Sandbox Code Playgroud)
由于终结器总是在GC的线程中运行,因此您可以创建一个终结器,将线程id(或线程对象)保存在静态值中.
样品:
public class ThreadTest {
public static Thread GCThread;
~ThreadTest() {
ThreadTest.GCThread = Thread.CurrentThread;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,只需创建此类的实例并执行垃圾回收:
public static void Main() {
ThreadTest test = new ThreadTest();
test = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(ThreadTest.GCThread.ManagedThreadID);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3657 次 |
最近记录: |