Лучший способ идентифицировать поток - через его управляемый идентификатор:
Thread.CurrentThread.ManagedThreadId;
Поскольку финализатор всегда выполняется в потоке GC, вы можете создать финализатор, который будет сохранять идентификатор потока (или объект потока) в статической переменной.
Пример:
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);
}