rksoftware

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

C# 2.0 以降の新機能の確認 - C# 6.0 - catch/finally ブロック内での await

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

catch/finally ブロック内での await

 該当のドキュメントが見つかりませんでした。
 catch および finally ブロックで await による非同期処理ができる。

static void Main(string[] args)
{
    MethodAsync().Wait();   // 非同期メソッドでの取得
}

static async Task<string> MethodAsync()
{
    var client = new System.Net.Http.HttpClient();
    var html = await client.GetStringAsync("http://rksoftware.hatenablog.com/about");
    try
    {
        html = html.Substring(0, int.MaxValue);
    }
    catch(ArgumentOutOfRangeException ex)
    {
        Console.WriteLine(ex.Message);
        // catch の中で await できる
        html = await client.GetStringAsync("http://rksoftware.hatenablog.com/about");
        html = new string(html.Take(100).ToArray());
    }

    Console.WriteLine(html);

    return html;
}