1

タスクをスレッドに割り当てるときに C# がどのように機能するかわかりません。

何か検証したい。Thread.currentThread().sleep() を停止したり、Thread.currentThread().sleep() を実行したりした場合でも、そのタスクが何をしているかに関係なく、常に 1 つのスレッドのみによって各タスクが処理されることが保証されていますか?他のタスクを提供しますか?では、スレッドとタスクの間は 1:1 ですか? タスクが何をしているかに関係なく、単にスリープ状態であっても、またはタスクが Task.Run または await Task.Run などを介して呼び出されたかどうかに関係なく?

4

1 に答える 1

3

タスクが再入可能になる可能性があることを認識しているケースがいくつかあります。1 つは、1 つのタスクが別のタスクの完了を待機しており、その最初のタスクがまだ開始されていない場合です。その場合、現在のスレッドで新しいタスクを開始するのは理にかなっています...一種の。ロックやその他のスレッド ローカル コンテキストに関して厄介な懸念が生じます。

スケジューラが適切と判断した場合、新しいタスクを「インライン」で実行することも (明らかに) 可能Task.Factory.StartNewですが、.NET に組み込まれているスケジューラはこれを行いません。

Stephen Toub (PFX チーム) からのより詳細な回答を含む、この他のスタック オーバーフローの質問を参照してください。

于 2013-01-31T15:29:42.630 に答える