É abusivo usar IDisposable e "using" como um meio de obter "comportamento com escopo definido" para segurança de exceção?

Algo que eu costumava usar em C ++ era deixar uma aulaA manipular uma condição de entrada e saída de estado para outra classeB, através doA construtor e destruidor, para garantir que, se algo nesse escopo gerasse uma exceção, B tivesse um estado conhecido quando o escopo fosse encerrado. Isso não é puro RAII no que diz respeito à sigla, mas é um padrão estabelecido.

Em c #, muitas vezes eu quero fazer

class FrobbleManager
{
    ...

    private void FiddleTheFrobble()
    {
        this.Frobble.Unlock();
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw
        Bar();                  // Can throw
        this.Frobble.Lock();
    }
}

O que precisa ser feito assim

private void FiddleTheFrobble()
{
    this.Frobble.Unlock();

    try
    {            
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw
        Bar();                  // Can throw
    }
    finally
    {
        this.Frobble.Lock();
    }
}

se eu quiser garantir oFrobble declarar quandoFiddleTheFrobble retorna. O código seria melhor com

private void FiddleTheFrobble()
{
    using (var janitor = new FrobbleJanitor(this.Frobble))
    {            
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw
        Bar();                  // Can throw
    }
}

OndeFrobbleJanitor pareceaproximadamente gostar

class FrobbleJanitor : IDisposable
{
    private Frobble frobble;

    public FrobbleJanitor(Frobble frobble)
    {
        this.frobble = frobble;
        this.frobble.Unlock();
    }

    public void Dispose()
    {
        this.frobble.Lock();
    }
}

E é assim que eu quero fazer. Agora a realidade alcança, já que o que euquer usarrequer que oFrobbleJanitor é usadocom using. Eu poderia considerar isso um problema de revisão de código, mas algo está me incomodando.

Pergunta, questão: O acima exposto seria considerado como uso abusivo deusing eIDisposable?

questionAnswers(12)

yourAnswerToTheQuestion