本文へスキップ
BecomeCoder

C#実践コース · 第1章 非同期プログラミング · レッスン1

なぜ非同期か ― Task と async/await

ブラウザで完結

導入

通信やファイル読み込みは「待ち時間」が長い処理です。その間プログラムを固めず、待っている間に他のことをできるようにするのが非同期プログラミング。C#ではTaskasyncawaitで表します。

図解

sequenceDiagram
    participant M as メイン処理
    participant T as 時間のかかる処理

    M->>T: 開始(await)
    Note over M: 待つ間、固まらない
    T-->>M: 完了したら再開
    Note over M: 続きの処理へ

サンプル

Console.WriteLine("処理開始");

await Task.Delay(100);   // 100ミリ秒「待つ」(本来は通信などの待ち時間)

Console.WriteLine("待機完了");

// async を付けたメソッドは Task を返し、中で await できる
await DoWorkAsync();

async Task DoWorkAsync()
{
    Console.WriteLine("作業中...");
    await Task.Delay(50);
    Console.WriteLine("作業完了");
}
  • Taskは「いつか完了する処理」を表す型
  • awaitは「その処理の完了を、固まらずに待つ」印
  • asyncを付けたメソッドは中でawaitでき、Taskを返す

演習

Console.WriteLine("ダウンロード開始");

// TODO: Task.Delay(100) を await してから "ダウンロード完了" と出力してください
___
  • 期待される出力: ダウンロード開始 ダウンロード完了(2行)
ヒント1を見る

await Task.Delay(100); を挟みます

ヒント2を見る

await Task.Delay(100); Console.WriteLine("ダウンロード完了");

まとめ

  • 非同期は「待ち時間中に固まらない」ための仕組み
  • Taskは将来完了する処理、awaitはその完了を待つ印
  • asyncメソッドはTaskを返し、中でawaitできる

次回: 結果を返す非同期Task<T>です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。