-1
Рассмотрим следующий классКак завершить задачу при удалении объекта? C#
class Melody
{
public Melody()
{
Task.Factory.StartNew(()=>play_melody_in_loop());
}
}
play_melody_in_loop
играет мелодия в цикле и не завершается.
Экземпляры Melody
могут быть собраны GC, когда они выходят за рамки. Если это произойдет, я хочу остановить воспроизведение.
Могу ли я избежать внедрения IDisposable
?
Реализация IDisposable не поможет поймать коллекцию объектов GC. Вам нужно будет добавить деструктор в класс Melody, ~ Melody() {} и остановить задачу в деструкторе. –
GC не недетерминирован. Когда ваш объект выходит из сферы действия, ничто не заставляет GC собирать его немедленно. Это может произойти после длительного и, казалось бы, случайного периода времени. –
Есть ли событие для выхода из сферы действия? Вызывается деструктор, когда это происходит? – user2136963