2015-06-07 3 views
-1

Рассмотрим следующий классКак завершить задачу при удалении объекта? C#

class Melody 
{ 
    public Melody() 
    { 
     Task.Factory.StartNew(()=>play_melody_in_loop()); 

    } 
} 

play_melody_in_loop играет мелодия в цикле и не завершается.

Экземпляры Melody могут быть собраны GC, когда они выходят за рамки. Если это произойдет, я хочу остановить воспроизведение.

Могу ли я избежать внедрения IDisposable?

+1

Реализация IDisposable не поможет поймать коллекцию объектов GC. Вам нужно будет добавить деструктор в класс Melody, ~ Melody() {} и остановить задачу в деструкторе. –

+1

GC не недетерминирован. Когда ваш объект выходит из сферы действия, ничто не заставляет GC собирать его немедленно. Это может произойти после длительного и, казалось бы, случайного периода времени. –

+0

Есть ли событие для выхода из сферы действия? Вызывается деструктор, когда это происходит? – user2136963

ответ

0

Функция, в которой я нуждалась, была ~Melody(). Его не нужно вызывать вручную, в отличие от Dispose().

Благодаря Denis Yarkovoy

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