Task.Run
CPUを使う処理を.NETスレッドプールのワーカースレッドへ明示的にオフロードするためのAPI。I/OバウンドのTaskに使う必要はない。
- 概念URI
https://comcomponent.com/knowledge/taskrun-dotnet/
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Task.RunをI/O-bound処理に用いることは推奨されません。既にasyncなI/OをTask.Runで包むのは、I/O待ちを別スレッドへ投げ直しているだけで、整理しづらくなるわりに得がない / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunはCPU-bound処理に対する本記事の推奨です。Task.Runが効くのは、CPU計算を今のスレッドから外したいときである / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunはUIスレッドのコンテキストに対する本記事の推奨です。WinForms/WPFなどUIイベントハンドラで重い計算をそのまま回すと画面が止まるため、Task.RunでUIスレッドから計算を外すのが素直である / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunをASP.NET Coreのリクエスト処理に用いることは推奨されません。ASP.NET Coreのリクエスト処理はもともとThreadPool上で動いているため、Task.Runを挟んで直後にawaitしても余計なスケジューリングが増えるだけになりやすく、基本的に避ける / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunをHosted Service (IHostedService)に用いることは推奨されません。常駐ループをTask.Run投げっぱなしで始めると寿命・例外の持ち主が曖昧になるため、Hosted Service(BackgroundService)に載せることが推奨される。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.Runはワーカースレッド(.NET)を前提とします。Task.Runで包んだCPUバウンドの処理は、ワーカースレッドを1本占有して実行される / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunはUIスレッドのコンテキストに対する本記事の推奨です。Task.RunはCPU計算をUIスレッドから外すためのものであり、UIイベントハンドラで重いハッシュ計算などを行うときに使うのが本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunをI/O-bound処理に用いることは推奨されません。Task.Run(async () => await File.ReadAllTextAsync(...))のようにI/O待ちをTask.Runで包む書き方は、待ちを無駄にThreadPoolへ投げ直しているだけで得がないと本記事は述べる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Task.RunはUIスレッドの詰まりを防ぎます。重いCPU計算をTask.RunでThreadPoolへ逃がすことで、UIスレッドのメッセージループが塞がれて画面が固まって見える状態を避けられる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。