rksoftware

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

C# 2.0 以降の新機能の確認 - C# 5.0 - 非同期処理 (async/await)

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

非同期処理 (async/await)

 https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/
 同期メソッドの作成とほぼ同様の容易さで、非同期メソッドを作成できる。async が付いたメソッドは非同期メソッドになる。非同期メソッドの完了を待機する場合は await をつけてメソッドを呼び出す。

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

    Console.ReadKey();
}

// 非同期メソッド (async がついている)
static async Task<string> MethodAsync()
{
    var client = new System.Net.Http.HttpClient();
    // GetStringAsync は非同期メソッドなので await で待機できる
    var html = await client.GetStringAsync("http://rksoftware.hatenablog.com/");
    Console.WriteLine(html.Take(100).ToArray());
    return html;
}

// 同期メソッド
static void Method()
{
    var client = new System.Net.WebClient();
    // データの取得を非同期に行うために、コールバックを登録するコード
    client.DownloadStringCompleted +=
        (object sender, System.Net.DownloadStringCompletedEventArgs e) =>
        {
            Console.WriteLine(new string(e.Result.Take(100).ToArray()));
        };
    client.DownloadStringAsync(new Uri("http://rksoftware.hatenablog.com/"));
}