処理を止めずに進める「非同期処理(async / await)」とは?
C#では、時間のかかる処理(ファイル・Web・データベースなど)を
待たずに他の作業を進めることができる非同期処理が用意されています。
それを簡単に書くための仕組みが async
/ await
です。
なぜ非同期処理が必要?
- 時間のかかる処理でアプリがフリーズしないようにするため
- 他の処理と並行して動作させるため
- ユーザーに快適な操作感を提供するため
基本構文
async Task メソッド名() {
await 時間のかかる処理;
}
例:3秒待ってからメッセージを表示する非同期メソッド
public async Task ShowAfterDelay() {
await Task.Delay(3000); // 3秒待つ(非同期で)
Console.WriteLine("3秒後に表示されました!");
}
呼び出し側の書き方(Mainなど)
await ShowAfterDelay(); // asyncメソッド内から呼び出す
※ Main メソッドも非同期にできます(C# 7.1 以降)
static async Task Main(string[] args) {
await ShowAfterDelay();
}
戻り値のある非同期メソッド
public async Task<int> GetNumberAsync() {
await Task.Delay(1000);
return 42;
}
int result = await GetNumberAsync();
Console.WriteLine(result); // → 42
非同期処理でよく使うメソッド
Task.Delay()
:指定時間だけ待機
HttpClient.GetAsync()
:Webアクセス
File.ReadAllTextAsync()
:ファイル読み取り
await Task.Run(() => ...)
:重い処理の非同期化
注意点
await
を使うにはメソッドに async
が必要
- 非同期メソッドは Task または Task<T> を返す
- UIアプリでは await を使ってUIスレッドをブロックしないように注意
まとめ
非同期処理(async / await)は、重い処理を効率的に行いながら、アプリ全体をスムーズに動かすための仕組みです。
async
を使ってメソッドを非同期化し、await
で「待ち」を制御することで、直感的かつ安全な並行処理が実現できます。
初心者でもまずは Task.Delay()
から練習してみましょう!