Wie asynchron entsorgen?

Sagen wir, ich habe eine Klasse, die das @ implementie IDisposable Schnittstelle. Etwas wie das

Meine Klass verwendet einige nicht verwaltete Ressourcen, daher dasDispose () Methode von IDisposable gibt diese Ressourcen frei.Meine Klass sollte so verwendet werden:

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

etzt möchte ich eine Methode implementieren, die @ aufruEtwas tun( asynchron. Ich füge @ eine neue Methode hinMeine Klass:

Nun, vom Client aus,Meine Klass sollte so verwendet werden:

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

enn ich jedoch nichts anderes tue, kann dies als Objekt fehlschlagemeine Klass könnte entsorgt werden, bevorEtwas tun( heißt (und wirft ein unerwartetes ObjectDisposedException). Also, der Aufruf an dieDispose () -Methode (implizit oder explizit) sollte verzögert werden, bis der asynchrone Aufruf vonEtwas tun( fertig

Ich denke, der Code in derDispose () Methode sollte ausgeführt werdenauf asynchrone Weise und nur einmal werden alle asynchronen Aufrufe aufgelöst. Ich würde gerne wissen, wie dies am besten erreicht werden kann.

Vielen Dank

HINWEIS: Der Einfachheit halber habe ich nicht angegeben, wie die Dispose () -Methode implementiert wird. Im wirklichen Leben folge ich normalerweise demDispose pattern.

AKTUALISIEREN Vielen Dank für Ihre Antworten. Ich schätze Ihre Bemühungen. Wie chakrit hat @ kommentie, Ich brauche dasmehrere Aufrufe an das asynchrone DoSomething können gemacht werden. Im Idealfall sollte so etwas gut funktionieren:

using ( MyClass myClass = new MyClass() ) {

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

}

Ich werde das Zählsemaphor studieren, es scheint, was ich suche. Es könnte auch ein Designproblem sein. Wenn ich es für zweckmäßig halte, teile ich Ihnen einige Teile des realen Falls und wasMeine Klass tut es wirklich.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage