場合によっては、Visual Studioでこれを行うことをお勧めします
await using var disposable = new Disposable();
// Do something
これの代わりに
using var disposable = new Disposable();
// Do something
違いは何であるusing
とはawait using
?
どれを使用するかをどのように決定すればよいですか?
場合によっては、Visual Studioでこれを行うことをお勧めします
await using var disposable = new Disposable();
// Do something
これの代わりに
using var disposable = new Disposable();
// Do something
違いは何であるusing
とはawait using
?
どれを使用するかをどのように決定すればよいですか?
回答:
クラシックを使用してDispose()
、IDisposable
インターフェイスを実装するオブジェクトのメソッドを呼び出します。
using var disposable = new Disposable();
// Do Something...
に相当
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
新しい関数は、呼び出しの使用を待機しDisposeAsync()
、IAsyncDisposable
インターフェースを実装するオブジェクトのメソッドを待機します。
await using var disposable = new AsyncDisposable();
// Do Something...
に相当
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
IAsyncDisposableインタフェースに追加されました.NET Core 3.0
と.NET Standard 2.1
。
.NETでは、アンマネージリソースを所有するクラスは通常、IDisposableインターフェイスを実装して、アンマネージリソースを同期的に解放するメカニズムを提供します。ただし、場合によっては、同期リソースに加えて(またはその代わりに)アンマネージリソースを解放するための非同期メカニズムを提供する必要があります。このようなメカニズムを提供することで、コンシューマは、GUIアプリケーションのメインスレッドを長時間ブロックすることなく、リソースを大量に消費する破棄操作を実行できます。
このインターフェイスのIAsyncDisposable.DisposeAsyncメソッドは、非同期の破棄操作を表すValueTaskを返します。アンマネージリソースを所有するクラスはこのメソッドを実装し、これらのクラスのコンシューマーは、不要になったオブジェクトに対してこのメソッドを呼び出します。
await using
しIAsyncDisposable
、あなたが唯一使用できるusing
とIDisposable
他のどちらも継承しているので。どちらかを使用できるのは、具象クラスが両方を実装していて、非同期コードを作成しているかどうかによって異なります。