導入
通信やファイル読み込みは「待ち時間」が長い処理です。その間プログラムを固めず、待っている間に他のことをできるようにするのが非同期プログラミング。C#ではTask・async・awaitで表します。
図解
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>です。