I/O-bound処理
HTTP、DB、ファイル、ソケットなど、外部の完了待ちが中心の処理。待っている間にスレッドを他の仕事へ返せる。
- 概念URI
https://comcomponent.com/knowledge/io-bound-operation/
- 別名・表記
- I/O待ち
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Task.RunをI/O-bound処理に用いることは推奨されません。既にasyncなI/OをTask.Runで包むのは、I/O待ちを別スレッドへ投げ直しているだけで、整理しづらくなるわりに得がない / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- I/O-bound処理はCancellationToken(.NET)を利用します。新たに設計するI/O待ちのasync APIでは、CancellationTokenを受けてそのまま下流へ渡す設計が基本である(CancellationTokenを持たない既存APIも存在する) / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- Task.WhenAllはI/O-bound処理に対する本記事の推奨です。独立した複数のI/O待ち処理は、1件ずつawaitするより先に全部開始してTask.WhenAllでまとめて待つほうが素直である / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Parallel.ForEachAsyncはI/O-bound処理に対する本記事の推奨です。件数が多いI/O処理では、Task.WhenAllで全件同時に投げるより、Parallel.ForEachAsyncで同時実行数の上限を明示するほうが安定する / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- SemaphoreSlimはI/O-bound処理に対する本記事の推奨です。外部APIへの同時呼び出し数をより自由に制御したい場合、SemaphoreSlimで並列数の上限を作る方法もある / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- IAsyncEnumerable<T>はI/O-bound処理に対する本記事の推奨です。ページングされたAPIやストリーミング結果など、全件そろうまで待ちたくない逐次データにはIAsyncEnumerable<T>とawait foreachが向く / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- await usingはI/O-bound処理を前提とします。破棄時にフラッシュや通信終了などの非同期処理が必要な型(IAsyncDisposable)を扱うI/O処理では、usingではなくawait usingを使う(I/O以外のIAsyncDisposable型を扱う場合にも同様に当てはまる) / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- Task.RunをI/O-bound処理に用いることは推奨されません。Task.Run(async () => await File.ReadAllTextAsync(...))のようにI/O待ちをTask.Runで包む書き方は、待ちを無駄にThreadPoolへ投げ直しているだけで得がないと本記事は述べる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。