首页 > 解决方案 > 为什么线程 2 不可用?

问题描述

在下面的小控制台应用程序中,我正在打印主线程 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();
    }

线程 1 线程 3 线程 4 线程 5 线程 6 线程 7

标签: c#threadpool

解决方案


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

印刷:

1
2

推荐阅读