So entsorgen Sie asynchron?

Sagen wir ich habe eine Klasse, die die IDisposable - Schnittstelle. So etwas wie dieses:

So entsorgen Sie asynchron?

MyClass verwendet einige nicht verwaltete Ressourcen, damit die Dispose() Methode von IDisposable Versionen dieser Ressourcen. MyClass sollte auch so eingesetzt werden:

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

Nun, ich möchte, um eine Methode zu implementieren, die Anrufe DoSomething() asynchron. Ich füge eine neue Methode zur MyClass:

So entsorgen Sie asynchron?

Nun von der client-Seite, MyClass sollte auch so eingesetzt werden:

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

Jedoch, wenn ich nicht etwas anderes tun, könnte dies fehlschlagen, da das Objekt myClass könnte entsorgt werden, bevor DoSomething() genannt wird (und werfen ein unerwartetes ObjectDisposedException). Also, der Aufruf an die Dispose() Methode (entweder implizit oder explizit) sollte solange verzögert, bis der asynchrone Aufruf DoSomething() ist getan.

Ich denke, der code in der Dispose() Methode ausgeführt werden soll in einer asynchronen Art und Weise, und nur einmal alle asynchronen Aufrufe werden aufgelöst,. Ich würde gerne wissen, was könnte der beste Weg, dies zu erreichen.

Dank.

HINWEIS: der Einfachheit halber, habe ich noch nicht eingegeben in die details, wie die Dispose () - Methode implementiert ist. Im realen Leben habe ich in der Regel Folgen die Dispose-Muster.


UPDATE: ich Danke Ihnen so sehr für Ihre Antworten. Ich schätzen Ihre Bemühungen. Als chakrit hat kommentiert, brauche ich mehrere Aufrufe der async DoSomething gemacht werden können. Im Idealfall sollte sowas funktionieren:

using ( MyClass myClass = new MyClass() ) {

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

}

Ich studieren werde, die counting semaphore, es scheint, was ich Suche. Es könnte auch ein design-problem. Wenn ich es bequem finden, ich werde mit Ihnen teilen einige bits von dem realen Fall und was MyClass wirklich tut.

InformationsquelleAutor Auron | 2008-12-30
Schreibe einen Kommentar