私は.NETの新しいTPLライブラリを使用していますが、説明できない奇妙な動作に直面しています。私の場合、何らかの理由でネストされたタスクが開始されません。私は私が持っている解決策を次のように単純化しました:
bool flag = false;
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(() =>
{
while (true) // a lot of newcoming tasks
{
Thread.Sleep(200); //do some work
Task.Factory.StartNew(() =>
{
flag = true;
});
}
});
}
Thread.Sleep(2000);
Assert.IsTrue(flag);
同時に実行されている5つのタスクがあります。各タスクは、保留中のキューからいくつかの要素を取得し、いくつかの操作を実行してから、この操作の結果に対してネストされたタスクを実行しようとします。問題は、要素が多すぎて(while(true)がこれをシミュレートしている場合)、5つのタスクすべてが常に実行されている場合、ネストされたタスクが開始されないことです。は、whileループを使用してほとんどのタスクの実行が終了した後にのみ開始できます。
ネストされたタスクの実行をブロックするwhileステートメントに問題があるようですが、何がわかりません:)