2013-07-30 3 views
0

Я хотел бы знать, что происходит с потоками, которые работают в фоновом режиме после того, как объект собирается GC? Убивают ли они себя или делают процесс зомби?Бесконечная нить в фоновом режиме и GC

private Thread currentDateTimer; 
private DateTime ActualDateTime; 

if (this.currentDateTimer == null) 
     { 
      this.currentDateTimer = new Thread(() => 
      { 
       while (true) 
       { 
        this.ActualDateTime = DateTime.Now; 
        Thread.Sleep(60 * 1000 - (DateTime.Now.Second * 1000 + DateTime.Now.Millisecond)); 
       } 
      }) { IsBackground = true }; 
      this.currentDateTimer.Start(); 
     } 

Нить не знает, когда остановиться.

Будет ли эта нить убивать после того, как экземпляр объекта будет собран? Будет ли GC собирать этот объект с тех пор, как его поток нуждается в this.ActualDateTime?

Надеюсь, у кого-то была такая же проблема.

ответ

4

Поскольку делегат потока захвачен this, объект не будет собран.

Поскольку вы начали его с IsBackground = true, он завершится сам по себе, когда приложение отключится.

+0

Я понял, что объект никогда не будет собран, даже если у меня нет ничего другого, указывающего на объект? –

+0

Как говорит @Lasse, делегат потока все равно укажет на объект, чтобы он не собирался. – Venemo

+0

Интересно. Напоминает мне о GC из ActionScript 3, где tweens внезапно перестали работать, если u объявили их в локальной области – DarkBee

Смежные вопросы