Должен ли Dispose вызываться при перебрасывании необработанного исключения? - PullRequest
0 голосов
/ 25 апреля 2019

Предположим, у меня есть класс, подобный приведенному ниже:

public class DisposableClass : IDisposable()
{
   private readonly Timer timer;

   DisposableClass()
   {
      this.timer = new Timer(s => cb(s), s, 1000, 1000);
   }

   Init()
   {
       try
       {
           // Do some initialization here that is not done in ctor.
       }
       catch (Exception)
       {
          // Log error.
          throw;
       }
       finally
       {
           // Is this correct?
           this.Dispose();
       }
   }

    public void Dispose()
    {
        this.timer?.Dispose();
    }
}

Мой вопрос заключается в том, является ли условие finally необходимым (или не должно быть вообще) в вышеприведенном случае для любого неконструктивного метода при создании необработанного исключения. Спасибо.

EDIT:

В ответе, пожалуйста, решайте вопросы в зависимости от Init(), являющихся public, protected, private уровнями видимости.

...