デフォルトのスケジューラにダンプされる CPU 集中型のタスクが多数あるとします (たとえば、デフォルトのスケジューラを介してTask.Run
、またはTask.Factory.StartNew
デフォルトのスケジューラを使用して、すべてが一度に実行されます)。各タスクには継続があります。スケジューラーはいくつかのタスクを開始し、それらを実行状態にします。それらのタスクが終了すると、スケジューラーは元のタスクと継続タスクを組み合わせてキューに入れ、スケジュールを設定し、それらの中から選択する必要があります。組織のタスクをより多く実行するのではなく、継続にどのように優先順位を付けるか。具体的には、タスクが完了し、継続がある場合、その継続は、既にキューに入れられている他のタスクよりもスケジューラーで優先されます。
たとえば、スケジューラーが多数の (T1...Tn) キューに入れられたタスクのうちの 2 つ (T1 & T2) を実行するとします。それらの 1 つが完了すると、スケジューラーは必然的に継続 C1 を実行しますか、それとも T3 を開始することを決定するでしょうか? どちらを選択するかはとにかく決定論的ですか?スケジューラがより多くのタスクを実行することを選択する可能性はありますか? そのため、T1 の終了とその継続 C1 の開始の間にかなりの遅延が生じる可能性がありますか?
更新: サンプルコードを実行して回答を追加しましたが、この観察された動作が保証されているかどうかを知りたいですか?