Freigeben über


System.IAsyncDisposable-Schnittstelle

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

In .NET implementieren Klassen, die nicht verwaltete Ressourcen besitzen, in der Regel die IDisposable Schnittstelle, um einen Mechanismus zum synchronen Freigeben nicht verwalteter Ressourcen bereitzustellen. In einigen Fällen müssen sie jedoch einen asynchronen Mechanismus zum Freigeben nicht verwalteter Ressourcen zusätzlich zu (oder anstelle) des synchronen Mechanismus bereitstellen. Durch die Bereitstellung eines solchen Mechanismus kann der Verbraucher ressourcenintensive Dispose-Vorgänge ausführen, ohne den Hauptthread einer GUI-Anwendung für längere Zeit zu blockieren.

Die IAsyncDisposable.DisposeAsync-Methode dieser Schnittstelle gibt eine ValueTask zurück, die den asynchronen Löschvorgang darstellt. Klassen, die nicht verwaltete Ressourcen besitzen, implementieren diese Methode, und der Consumer dieser Klassen ruft diese Methode für ein Objekt auf, wenn sie nicht mehr benötigt wird.

Die asynchronen Methoden werden in Verbindung mit den async Schlüsselwörtern await in C# und Visual Basic verwendet. Weitere Informationen finden Sie unter The Task asynchronous programming model in C# or Asynchronous Programming with Async and Await (Visual Basic).

Verwenden eines Objekts, das IAsyncDisposable implementiert

Wenn Ihre Anwendung ein Objekt verwendet, das IAsyncDisposable implementiert, sollten Sie die Implementierung des Objekts DisposeAsync aufrufen, wenn Sie es nicht mehr benötigen. Um sicherzustellen, dass Ressourcen auch bei einer Ausnahme freigegeben werden, fügen Sie den Code, der das IAsyncDisposable Objekt verwendet, in die using-Anweisung (in C# ab Version 8.0) ein, oder rufen Sie die DisposeAsync Methode in einer finally Klausel der try/finally Anweisung auf. Weitere Informationen zum try/finally Muster finden Sie unter try-finally (C#) oder Try...Catch...Finally-Anweisung (Visual Basic).

Implementieren von IAsyncDisposable

Sie können in den folgenden Situationen implementieren IAsyncDisposable :

  • Beim Entwickeln eines asynchronen Enumerators, der nicht verwaltete Ressourcen besitzt. Asynchrone Enumeratoren werden mit dem asynchronen Streams-Feature von C# 8.0 verwendet. Weitere Informationen zu asynchronen Streams finden Sie im Lernprogramm: Generieren und Nutzen asynchroner Datenströme mit C# 8.0 und .NET Core 3.0.
  • Wenn Ihre Klasse nicht verwaltete Ressourcen besitzt und diese freigeben, ist ein ressourcenintensiver E/A-Vorgang erforderlich, z. B. das Leeren des Inhalts eines Zwischenpuffers in eine Datei oder das Senden eines Pakets über ein Netzwerk, um eine Verbindung zu schließen.

Verwenden Sie die DisposeAsync Methode, um die erforderlichen Bereinigungsvorgänge auszuführen, nachdem Sie die nicht verwalteten Ressourcen verwendet haben, z. B. Freimachen, Freigeben oder Zurücksetzen der nicht verwalteten Ressourcen. Weitere Informationen finden Sie unter Implementieren einer DisposeAsync-Methode.