hekkaaa
@hekkaaa
C#/.NET Developer

Завершится ли работа потока, если оборвать к нему ссылку?

Привет!
Вопрос в следующем.
Приберет ли на тот свет GC экземпляр класса вместе с работой потока из памяти и освободит ее?
Меня смущает что я не прерываю работу потока внутри объекта при удалении и есть мысль что она и останется висеть, так ли это? Обычно GC забирает все, на что уже не ссылаются, но тут не уверен и прошу подсказки.

Удаляю объект из коллекции вот так:
TestList.Remove(<объект экземпляра класса (TestService)>)


Есть пример класса: (код условный и не содержит остановку токена, но в оригинале он есть)

class TestService{

 public void TestThreadPool(){
  int count++
   ThreadPool.QueueUserWorkItem(new WaitCallback(obj => {  
     while( true) {
        count++
        // тут проверка токена. Он же СТОП потока.
        if (_token.IsCancellationRequested){ 
                 break;
         }
      }
    } )
  }
}


Я создаю коллекцию таких классов и запускаю потоки.

List<TestService> TestList= new List<TestService>();
TestList.Add(new TestService()..) // добавляем нужное количество объектов
...
TestList[0].TestThreadPool() // запуск потока.
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Ну раз поток работает, GC его трогать не будет, пока Вы не завершите его принудительно или не завершится основной поток приложения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы