我正在使用.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循環完成其大部分任務後才能啓動。
這似乎有點問題,而語句塊嵌套任務運行,但我不知道是什麼:)
是的,他們稍後開始,但我希望他們開始並行執行任務。如果我將循環中「i」索引的限制更改爲10,例如,我將創建並運行10個線程。但是沒有一個嵌套任務將與這些任務並行運行。 – lostaman 2010-07-28 13:01:54
爲父任務添加TaskCreationOptions.LongRunning解決了問題。 – lostaman 2010-07-28 13:23:58
它解決了下面的例子中的問題,但不是在我的項目:( – lostaman 2010-07-28 13:32:11