Время жизни объекта потока C#

Предположим, у меня есть код следующим образом:

int Main()
{
    if (true)
    {
       new Thread(()=>
          {
              doSomeLengthyOperation();
          }).Start();
    }
    while (true)
    {
       //do nothing
    }
}

есть 2 потока, я собираюсь назвать основной поток потоком, который выполняет функцию Main (), и поток new'eded внутри теста "if" как поток A.

мой вопрос в том, когда поток уничтожается? Сможет ли doSomeLenghtyOperation () выполнить завершение?

поскольку нет ссылок, указывающих на поток A, он будет отмечен как кандидат для мусора коллекция:

  1. сразу после "new Thread ().Start ()" сама инструкция заканчивается?
  2. сразу после выхода области" if(true)"?
  3. после doSomeLengthOperation() выполняется до конца?
  4. никогда?

все примеры, которые я вижу, - это Main (), удерживающий ссылку, а затем основной поток, ожидающий соединения с потоком A перед выходом. Мне любопытно, какова продолжительность жизни кода выше есть.

спасибо заранее!

4 ответов


на


слово "поток" может означать несколько вещей здесь:


    когда поток A уничтожается?

    , когда doSomeLengthyOperation заканчивается.

    будет doSomeLenghtyOperation () быть в состоянии запустить в завершение

    Да, даже если основной поток существует, потому что это не фоновый поток. Если вы установите IsBackground свойство true перед запуском потока всякий раз, когда существует основной поток, этот поток также будет остановлен.


    Это отличный вопрос! Нить обязательно закончит, и вы можете попробовать это сами. Но это может стать интересным, если вы позвоните в GC.Collect () в то время как. Согласно C# Рихтера через CLR, это будет сбор мусора.

    обновление

    Я считаю, что это не будет мусор, собранный с потока.CurrentThread сохраняет его в памяти, имея ссылку.