rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 8.0 - 非同期の破棄可能

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

非同期の破棄可能

 https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/implementing-disposeasync
 インターフェイス System.IAsyncDisposable が追加された。await using で使う。using で使いたければ同時に System.IDisposable も実装することも可能。

// 非同期の破棄
await using var sample = new Sample();
// DisposeAsyncCore
// DisposeAsync
// と出力される

// IAsyncDisposable を実装したクラス
public class Sample : IAsyncDisposable
{
    // IAsyncDisposable インターフェイスで定義されているのメソッド
    public async ValueTask DisposeAsync()
    {
        await DisposeAsyncCore();
        Console.WriteLine("DisposeAsync");
    }

    // sealed クラスでない場合は派生クラスから読んでもらうためにこのメソッドを作っておく
    protected async virtual ValueTask DisposeAsyncCore()
    {
        Console.WriteLine("DisposeAsyncCore");
    }
}