为什么线程2不可用?

use*_*018 1 c# threadpool

在下面的小控制台应用程序中,我打印主线程Id和另外5个线程,它打印1,3,4,5,6,7,但不是2.线程2是否可用以及如何生成此数字?

static void Main(string[] args)
    {
        Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}");

        Enumerable.Range(0, 5).ToList().ForEach(f =>
        {
            new Thread(() =>
            {
                Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}");
                Thread.Sleep(1000);
            }).Start();

        });
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

螺纹1螺纹3螺纹4螺纹5螺纹6螺纹7

Zer*_*tul 7

Id = 2的线程是垃圾收集器线程.您可以通过运行终结器来检查其ID:

class Test
{
    ~Test()
    {
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    }
}

static void Main(string[] args)
{
    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);

    var test = new Test();
    test = null;
    GC.Collect();
}
Run Code Online (Sandbox Code Playgroud)

打印:

1
2
Run Code Online (Sandbox Code Playgroud)