IAsyncDisposable.DisposeAsync IAsyncDisposable.DisposeAsync IAsyncDisposable.DisposeAsync IAsyncDisposable.DisposeAsync Method


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

 System::Threading::Tasks::ValueTask DisposeAsync();
public System.Threading.Tasks.ValueTask DisposeAsync ();
abstract member DisposeAsync : unit -> System.Threading.Tasks.ValueTask
Public Function DisposeAsync () As ValueTask


非同期の破棄操作を表すタスク。A task that represents the asynchronous dispose operation.


このメソッドを使用して、このインターフェイスを実装するクラスのインスタンスによって保持されているファイル、ストリーム、ハンドルなどのアンマネージリソースを非同期的に終了または解放します。Use this method to asynchronously close or release unmanaged resources such as files, streams, and handles held by an instance of the class that implements this interface. IDisposable.Dispose代わりにこのメソッドを使用すると、GUI アプリケーションのメインスレッドを長時間ブロックすることなく、リソースを集中的に使用する dispose 操作を実行できます。Using this method instead of IDisposable.Dispose enables you to perform a resource-intensive dispose operation without blocking the main thread of a GUI application for a long time.


IAsyncDisposableインターフェイスを実装するクラスを使用している場合は、クラスのDisposeAsync使用が終了したら、その実装を呼び出す必要があります。If you are using a class that implements the IAsyncDisposable interface, you should call its DisposeAsync implementation when you are finished using the class. 詳細については、「」の「iasyncdisposable を実装するオブジェクトの使用IAsyncDisposable 」を参照してください。For more information, see the "Using an object that implements IAsyncDisposable" section in the IAsyncDisposable topic.

このメソッドを実装する場合は、包含階層を介して呼び出しを伝達することによって、保持されているすべてのリソースが解放されるようにします。When implementing this method, ensure that all held resources are freed by propagating the call through the containment hierarchy. たとえば、オブジェクト a がオブジェクト b を割り当て、オブジェクト b がオブジェクト C を割り当てる場合、のDisposeAsync実装は b に対してを呼び出すDisposeAsync必要があります。 DisposeAsyncこの場合、c でを呼び出す必要があります。基底クラスがを実装DisposeAsync IAsyncDisposableしている場合、オブジェクトはその基底クラスのメソッドも呼び出す必要があります。For example, if an object A allocates an object B, and object B allocates an object C, then A's DisposeAsync implementation must call DisposeAsync on B, which must in turn call DisposeAsync on C. An object must also call the DisposeAsync method of its base class if the base class implements IAsyncDisposable.

オブジェクトのDisposeAsyncメソッドが複数回呼び出される場合、オブジェクトは、最初の呼び出しの後にすべての呼び出しを無視し、正常ValueTaskに完了したを同期的に返す必要があります。If an object's DisposeAsync method is called more than once, the object must ignore all calls after the first one and synchronously return a successfully completed ValueTask. DisposeAsyncメソッドが複数回呼び出された場合、オブジェクトは例外をスローしません。The object must not throw an exception if its DisposeAsync method is called multiple times. リソースが既にDisposeAsync破棄されObjectDisposedExceptionている場合、以外のインスタンスメソッドはをスローできます。Instance methods other than DisposeAsync can throw an ObjectDisposedException when resources are already disposed.