Como descartar de forma assíncrona?

Digamos que eu tenho uma classe que implementa oIDisposable interface. Algo assim:

Minha classe usa alguns recursos não gerenciados, daí oDispose () método deIDisposable libera esses recursos.Minha classe deve ser usado assim:

using ( MyClass myClass = new MyClass() ) {
    myClass.DoSomething();
}

Agora, eu quero implementar um método que chamaFaça alguma coisa() assincronamente. Eu adiciono um novo método paraMinha classe:

Agora, do lado do cliente,Minha classe deve ser usado assim:

using ( MyClass myClass = new MyClass() ) {
    myClass.AsyncDoSomething();
}

No entanto, se eu não fizer mais nada, isso poderá falhar, pois o objetominha classe pode ser descartado antesFaça alguma coisa() é chamado (e lança um inesperadoObjectDisposedException) Então, a chamada para oDispose () (implícito ou explícito) deve ser adiado até que a chamada assíncrona paraFaça alguma coisa() é feito.

Eu acho que o código noDispose () método deve ser executadode forma assíncrona e apenas uma vez que todas as chamadas assíncronas sejam resolvidas. Eu gostaria de saber qual seria a melhor maneira de fazer isso.

Obrigado.

NOTA: Por uma questão de simplicidade, não inseri os detalhes de como o método Dispose () é implementado. Na vida real eu costumo seguir asDispor padrão.

ATUALIZAR: Muito obrigado por suas respostas. Eu aprecio o seu esforço. Comochakrit comentou, Eu preciso dissovárias chamadas para o DoSomething assíncrono podem ser feitas. Idealmente, algo assim deve funcionar bem:

using ( MyClass myClass = new MyClass() ) {

    myClass.AsyncDoSomething();
    myClass.AsyncDoSomething();

}

Vou estudar o semáforo de contagem, parece o que estou procurando. Também pode ser um problema de design. Se achar conveniente, compartilharei com você alguns trechos do caso real e quaisMinha classe realmente faz.

questionAnswers(6)

yourAnswerToTheQuestion