System.IAsyncDisposable インターフェイス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

.NET では、アンマネージ リソースを所有するクラスは、通常、アンマネージ リソースを同期的に解放するためのメカニズムを提供するインターフェイスを実装 IDisposable します。 ただし、場合によっては、同期リソースに加えて (または同期リソースではなく) アンマネージド リソースを解放するための非同期メカニズムを提供する必要があります。 このようなメカニズムを提供することで、コンシューマーは、GUI アプリケーションのメイン スレッドを長時間ブロックすることなく、リソースを集中的に消費する破棄操作を実行できます。

このインターフェイスのメソッドは IAsyncDisposable.DisposeAsync 、非同期の破棄操作を表す a ValueTask を返します。 アンマネージ リソースを所有するクラスは、このメソッドを実装し、これらのクラスのコンシューマーは、不要になったときにオブジェクトに対してこのメソッドを呼び出します。

非同期メソッドは、C# および await Visual Basic のasyncキーワード (keyword)と組み合わせて使用されます。 詳細については、「 C# のタスク非同期プログラミング モデル」または 「Async および Await を使用した非同期プログラミング (Visual Basic)」を参照してください。

IAsyncDisposable を実装するオブジェクトを使用する

アプリケーションで実装 IAsyncDisposableするオブジェクトを使用する場合は、使用が完了したときにオブジェクトの DisposeAsync 実装を呼び出す必要があります。 例外が発生した場合でもリソースが確実に解放されるようにするには、オブジェクトを使用IAsyncDisposableするコードを using ステートメント (バージョン 8.0 以降の C#) に配置するか、ステートメントの句内でメソッドをfinallyfinally/try呼び出DisposeAsyncします。 パターンの詳細try/finallyについては、「try-finally (C#)」または「Try..」を参照してください。キャッチ。。。Finally ステートメント (Visual Basic)。

IAsyncDisposable を実装する

次の状況で実装 IAsyncDisposable できます。

  • アンマネージ リソースを所有する非同期列挙子を開発する場合。 非同期列挙子は、C# 8.0 非同期ストリーム機能と共に使用されます。 非同期ストリームの詳細については、「 チュートリアル: C# 8.0 と .NET Core 3.0 を使用して非同期ストリームを生成および使用する」を参照してください。
  • クラスがアンマネージ リソースを所有し、それらを解放するには、中間バッファーの内容をファイルにフラッシュしたり、ネットワーク経由でパケットを送信して接続を閉じたりするなど、リソースを集中的に使用する I/O 操作が必要です。

アンマネージド リソースのDisposeAsync解放、解放、リセットなど、アンマネージ リソースを使用した後に必要なクリーンアップを実行するには、このメソッドを使用します。 詳細については、「DisposeAsync メソッドを実装する」を参照してください