ホームページ >バックエンド開発 >C++ >Task.Run() と Task.Factory.StartNew(): いつどちらを使用する必要がありますか?

Task.Run() と Task.Factory.StartNew(): いつどちらを使用する必要がありますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-12 08:58:41667ブラウズ

Task.Run() vs. Task.Factory.StartNew(): When Should You Use Which?

.NET 非同期プログラミング: Task.Run() と Task.Factory.StartNew() の比較

.NET 非同期プログラミングでは、多くの場合、新しいタスクを作成して開始する必要があります。この目的のために、.NET Framework は、一般的に使用される 2 つのメソッド Task.Run()Task.Factory.StartNew() を提供します。どちらも同じ基本的な目標を達成しますが、機能と使用例は異なります。

Task.Factory.StartNew()

Task.Factory.StartNew()機能がさらに豊富になり、新しいタスクの動作をカスタマイズするための複数のオプションが提供されます。受け入れる主要なパラメータには次のものがあります:

  • アクション/機能: 新しいタスクで実行されるデリゲート。
  • cancelToken: タスクを中止するために使用できるキャンセル トークン。
  • TaskCreationOptions: タスクの作成オプションやスケジューラなど、タスクの動作を制御するオプションのセット。
  • TaskScheduler: タスクを実行するスケジューラ。

この柔軟性により、長時間実行されるタスクの作成や特定のスレッドでのタスクの実行など、特定のニーズに合わせてタスクを調整できます。

Task.Run()

Task.Run() は、.NET 4.5 で導入された Task.Factory.StartNew() の簡易バージョンです。次の設定を使用して、新しいタスクのデフォルト構成を提供します:

  • cancelToken.None: キャンセル トークンを使用しません。
  • TaskCreationOptions.DenyChildAttach: 新しいタスクによって作成されたサブタスクを元のタスクにアタッチすることはできません。
  • TaskScheduler.Default: タスクは、通常はスレッド プールを使用して、デフォルトのタスク スケジューラで実行されます。

は、特別なカスタマイズが必要なく、デフォルト設定を使用して新しいタスクをすぐに開始する場合に便利な選択肢です。 Task.Run()

Task.Run() と Task.Factory.StartNew() を使用する場合

一般に、新しいタスクの動作をカスタマイズする必要がある場合は、

を使用します。これには次のシナリオが含まれます: Task.Factory.StartNew()

    長時間実行タスクを作成する
  • 特定のキャンセルポリシーを指定します
  • 特定のスレッドまたはスレッド プールでタスクを実行します
カスタマイズが必要なく、デフォルト設定で新しいタスクを作成するだけの場合は、

を使用します。 Task.Run() は、追加の構成を行わずにタスクの作成を簡素化するショートカットです。 Task.Run()

以上がTask.Run() と Task.Factory.StartNew(): いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。