IAsyncDisposable インターフェイス


アンマネージ リソースを非同期的に解放するためのメカニズムを提供します。Provides a mechanism for releasing unmanaged resources asynchronously.

public interface class IAsyncDisposable
public interface IAsyncDisposable
type IAsyncDisposable = interface
Public Interface IAsyncDisposable


.NET では、アンマネージリソースを所有するクラスは、通常、 IDisposable アンマネージリソースを同期的に解放するためのメカニズムを提供するインターフェイスを実装します。In .NET, classes that own unmanaged resources usually implement the IDisposable interface to provide a mechanism for releasing unmanaged resources synchronously. ただし、場合によっては、同期されたリソース (またはその代わり) に加えて、アンマネージリソースを解放するための非同期機構を提供する必要があります。However, in some cases they need to provide an asynchronous mechanism for releasing unmanaged resources in addition to (or instead of) the synchronous one. このようなメカニズムを提供することで、コンシューマーは、GUI アプリケーションのメインスレッドを長時間ブロックすることなく、リソースを集中的に使用する dispose 操作を実行できます。Providing such a mechanism enables the consumer to perform resource-intensive dispose operations without blocking the main thread of a GUI application for a long time.

IAsyncDisposable.DisposeAsyncこのインターフェイスのメソッドは、 ValueTask 非同期の破棄操作を表すを返します。The IAsyncDisposable.DisposeAsync method of this interface returns a ValueTask that represents the asynchronous dispose operation. アンマネージリソースを所有するクラスは、このメソッドを実装します。これらのクラスのコンシューマーは、不要になったオブジェクトに対してこのメソッドを呼び出します。Classes that own unmanaged resources implement this method, and the consumer of these classes calls this method on an object when it is no longer needed.

非同期メソッドは、 async await C# および Visual Basic のキーワードおよびキーワードと共に使用されます。The async methods are used in conjunction with the async and await keywords in C# and Visual Basic. 詳細については、「 C# の非同期プログラミングモデル 」または「 Async と Await を使用した非同期プログラミング (Visual Basic)」を参照してください。For more insformation, see The Task asynchronous programming model in C# or Asynchronous Programming with Async and Await (Visual Basic).

IAsyncDisposable を実装するオブジェクトの使用Using an object that implements IAsyncDisposable

アプリケーションでを実装するオブジェクトを使用する場合は IAsyncDisposable 、オブジェクトの使用が終了したら、そのオブジェクトの実装を呼び出す必要があり DisposeAsync ます。If your application uses an object that implements IAsyncDisposable, you should call the object's DisposeAsync implementation when you are finished using it. 例外が発生した場合でもリソースが解放されるようにするには、オブジェクトを使用するコードを IAsyncDisposable usingステートメント (C# では、バージョン8.0 以降) に配置するか、 DisposeAsync ステートメントの句内でメソッドを呼び出し finally try / finally ます。To make sure resources are released even in case of an exception, put the code that uses the IAsyncDisposable object into the using statement (in C# beginning from version 8.0) or call the DisposeAsync method inside a finally clause of the try/finally statement. パターンの詳細について try / finally は、「 try-finally (C#)」または「try...」を参照してください。キャッチ...Finally ステートメント(Visual Basic)。For more information about the try/finally pattern, see try-finally (C#) or Try...Catch...Finally Statement (Visual Basic).

IAsyncDisposable を実装するImplementing IAsyncDisposable

次のような場合にを実装でき IAsyncDisposable ます。You might implement IAsyncDisposable in the following situations:

  • アンマネージリソースを所有する非同期列挙子を開発する場合。When developing an asynchronous enumerator that owns unmanaged resources. 非同期列挙子は、C# 8.0 非同期ストリーム機能で使用されます。Asynchronous enumerators are used with the C# 8.0 async streams feature. 非同期ストリームの詳細については、「 チュートリアル: C# 8.0 および .Net Core 3.0 を使用した非同期ストリームの生成と使用」を参照してください。For more information about async streams, see Tutorial: Generate and consume async streams using C# 8.0 and .NET Core 3.0.

  • クラスがアンマネージリソースを所有して解放する場合は、中間バッファーの内容をファイルにフラッシュしたり、ネットワーク経由でパケットを送信して接続を閉じるなど、リソースを集中的に使用する i/o 操作が必要になります。When your class owns unmanaged resources and releasing them requires a resource-intensive I/O operation, such as flushing the contents of an intermediate buffer into a file or sending a packet over a network to close a connection.

アンマネージリソースの DisposeAsync 解放、解放、またはリセットなど、アンマネージリソースを使用した後に必要なすべてのクリーンアップを実行するには、メソッドを使用します。Use the DisposeAsync method to perform whatever cleanup is necessary after using the unmanaged resources, such as freeing, releasing, or resetting the unmanaged resources. 詳細については、「 DisposeAsync メソッドの実装」を参照してください。For more information, see Implement a DisposeAsync method.



アンマネージ リソースの非同期の解放およびリセットに関連付けられているアプリケーション定義のタスクを実行します。Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources asynchronously.


ConfigureAwait(IAsyncDisposable, Boolean)

非同期の破棄可能から返されるタスク上での待機がどのように実行されるかを構成します。Configures how awaits on the tasks returned from an async disposable are performed.