代码之家  ›  专栏  ›  技术社区  ›  user584018

为什么线程2不可用?

  •  1
  • user584018  · 技术社区  · 5 年前

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

    1 回复  |  直到 5 年前
        1
  •  7
  •   Zergatul    5 年前

    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