Почему тема 2 недоступна? - PullRequest
0 голосов
/ 12 января 2019

В нижеприведенном небольшом консольном приложении я печатаю 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 Ответ

0 голосов
/ 12 января 2019

Поток с Id = 2 является потоком сборщика мусора. Вы можете проверить его идентификатор, запустив финализатор:

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
...