タスク並列ライブラリ (TPL) の Task.Start()
、Task.Run()
、Task.Factory.StartNew()
の使用法の詳細な説明
タスク並列ライブラリ (TPL) は、Task.Start()
、Task.Run()
、Task.Factory.StartNew()
など、タスクを作成および起動するための複数のメソッドを提供します。どちらも非同期操作を実行するために使用されますが、使用方法には微妙な違いがあります。
Task.Start()
: 時代遅れのメソッド
Task.Start()
は、タスクを開始する前に Task オブジェクトを明示的に作成する必要がある古いアプローチです。 TaskCreationOptions
パラメータを介して追加のオプションを指定できます。ただし、代わりに Task.Run()
と Task.Factory.StartNew()
を使用することをお勧めします。
Task.Run()
: 簡略化されたオプション
Task.Run()
は、内部で Task.Factory.StartNew()
をデフォルトのパラメーターで使用する短縮メソッドです。これは、カスタム タスク オプションを必要としない単純なシナリオ向けに設計されています。 Task.Start()
とは異なり、開始前に Task オブジェクトを作成する必要はありません。
Task.Factory.StartNew()
: 多彩な選択肢
Task.Factory.StartNew()
が最も一般的な方法です。 TaskScheduler
、CancellationToken
、TaskCreationOptions
の指定など、タスク作成をカスタマイズするためのオプションが提供されます。これにより、タスクの実行をきめ細かく制御できます。
適切な方法を選択してください
Task.Run()
を使用します。 TaskScheduler
の設定やスレッド アフィニティの制御など) が必要な場合は、Task.Factory.StartNew()
を使用します。 Task.Start()
の使用は避けてください。 使用例
次のコード スニペットは、これらのメソッドの使用法を示しています。
<code class="language-csharp">// Task.Start() var task = new Task(() => Console.WriteLine("Task started.")); task.Start(); // Task.Run() Task.Run(() => Console.WriteLine("Task started.")); // Task.Factory.StartNew() var task = Task.Factory.StartNew( () => Console.WriteLine("Task started."), TaskCreationOptions.PreferFairness);</code>
結論
Task.Start()
、Task.Run()
、および Task.Factory.StartNew()
は同様の機能を持っていますが、それらの使用法はアプリケーションの特定のニーズに基づいて行う必要があります。 Task.Run()
は最も一般的なシナリオに適していますが、Task.Factory.StartNew()
は高度なカスタマイズ オプションを提供します。非推奨であるため、Task.Start()
の使用は一般的に推奨されません。
以上がTask.Start()、Task.Run()、および Task.Factory.StartNew(): どのメソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。