← C#

LESSON / ARTICLE

非同期処理の基礎

Taskとasync・awaitの役割を理解し、待ち時間を伴う処理を扱います。

非同期処理とは

非同期処理は、時間のかかる処理の完了を待つ間、呼び出し元の処理を不必要にブロックしないための仕組みです。ファイルやネットワークなどの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によるキャンセルも設計します。

非同期と並行・並列は同じ意味ではありません。まずは「待ち時間中に処理をブロックしない」という目的を理解しましょう。