非同期処理とは
非同期処理は、時間のかかる処理の完了を待つ間、呼び出し元の処理を不必要にブロックしないための仕組みです。ファイルやネットワークなどのI/O処理でよく使われます。
using System;
using System.Threading.Tasks;
class Program
{
static async Task<string> GetMessageAsync()
{
await Task.Delay(100);
return "completed";
}
static async Task Main()
{
string message = await GetMessageAsync();
Console.WriteLine(message);
}
}
Taskは将来完了する処理を表します。Task<T>は完了時にT型の結果を返します。
asyncとawait
asyncは非同期メソッドを宣言し、awaitはTaskなどの完了を非同期に待ちます。awaitはスレッドを新しく作る命令ではありません。
例外とキャンセル
非同期処理の例外は、awaitしたときに呼び出し元へ伝わります。長時間の処理ではCancellationTokenによるキャンセルも設計します。
非同期と並行・並列は同じ意味ではありません。まずは「待ち時間中に処理をブロックしない」という目的を理解しましょう。