Finalizer застрял в бесконечном цикле

Я столкнулся с вопросом на собеседовании, на который я не знал ответа (небольшая помощь :) ) ну там было что-то вроде:

Class SomeClass : IDisposable 
{
    public void Dispose()
    {
        while(true)
        {
        }
    } 

    ~SomeClass()
    {
        Dispose();
    }
}  

1) Финализируется ли объект, когда на него больше не ссылаются после следующего GC? Мой ответ был НЕТ, потому что поток финализации застрянет в бесконечном цикле.

2) Что можно сделать в Dispose для завершения финализации и сколько раз цикл будет продолжаться до того, как объект будет утилизирован (без учета времени, которое он проведет в следующем Gen)

Я не очень понимаю точный вопрос (2), у меня вроде как закончилось время...

Не зная ответа, я поставил статический счетчик, который доходит до 3, вызывает break и сообщает 3. что технически будет работать :), но это не ответ

Я предполагаю, что это как-то связано с GC.SupressFinalize()? может быть, вызов GC.SupressFinalize() перед входом в цикл?

есть идеи, если не по поводу ответа на непонятный вопрос, то скорее по поводу того, на что они могли быть нацелены?

6
задан Fischermaen 11 January 2012 в 20:26
поделиться