rksoftware

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

C# 2.0 以降の新機能の確認 - C# 7.0 - 一般的な型での非同期メソッドの戻り値 (ValueTask)(Generalized async return types)

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

一般的な型での非同期メソッドの戻り値 (ValueTask)(Generalized async return types)

 https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/async-return-types#generalized-async-return-types-and-valuetasktresult
 async 非同期メソッド内で非同期処理が必要である場所を通らなかった場合、Task オブジェクトを作らない事ができる。

static void Main(string[] args)
{
    int a = Func(true).Result;  // 非同期処理を通らないパターン
    int b = Func(false).Result; // 非同期処理を通るパターン
}

static async ValueTask<int> Func(bool b)
{
    if (b) return 0;
    await Task.Delay(1).ConfigureAwait(false);
    return 1;
}