Asyncシナプス繋がった

去年はBackGroundWorker使ってた訳ですが、今日、ぼーっとしてたらAsyncのシナプスが繋がったので備忘に。

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            status.Text = "1回目";
            await Task.Run(() => Thread.Sleep(1000));
            status.Text = "2回目";
            await Task.Run(() => Thread.Sleep(1000));
            status.Text = "3回目";
        }

注:statusはTextBlockです。
Asyncつかわないと、

  1. ボタンを押す
  2. 2秒たつ
  3. 3回目とTextBlockに3回目と表示される

となりますが、上のコードのようにすると

  1. ボタンを押す
  2. 1回目と表示される
  3. 1秒たつ
  4. 2回目と表示される
  5. 1秒たつ
  6. 3回目と表示される

となります。UIに途中経過が簡単に反映されるので、BackGroundWorkerとか用済みですね。BackGroundWorkerの作りがあまり好きでなかったので、これは嬉しいです。
ソースはGitHubにおいておきます。