Skip to content

Part VII: 非同期プログラミング

概要

本章では、C# の Task と async/await を使った非同期プログラミングを学びます。


Task の基本

Task の作成

var task = Task.Run(() => {
    // 非同期処理
    return "Result";
});

string result = await task;

チェーン処理

var result = await Task.Run(() => FetchData())
    .ContinueWith(t => Process(t.Result))
    .ContinueWith(t => Save(t.Result));

並行実行

var task1 = Task.Run(() => FetchData1());
var task2 = Task.Run(() => FetchData2());

await Task.WhenAll(task1, task2);

ValueTask

public ValueTask<int> GetCachedValueAsync()
{
    if (_cache.TryGetValue(key, out var value))
        return new ValueTask<int>(value);

    return new ValueTask<int>(FetchFromDatabaseAsync());
}

使い分けの指針

シナリオ 推奨
I/O バウンド async/await
CPU バウンド Task.Run / Parallel
混合 async/await + Task.Run

次のステップ

Part VIII では、MapReduce パターンと PLINQ を学びます。


参考資料