我遇到了麻煩。我有「WorkItem」,它有一個方法DoWork。 WorkItem可以具有必須完成的依賴關係,否則會拋出異常。任務並行庫 - 構建樹
下面是一個圖表,其中每個項目(A,B,C等)都是一個WorkItem。因此,排名第一的項目應該是A,B,E,因爲他們沒有依賴關係。
所以我把 「G」 到DoWorkForTask,但我的異常拋出本身,這證明,也就是說,A和B不是C運行之前完成。整個微小項目zipped up here.
private void DoWorkForTask(WorkItem item)
{
// NOTE: item relies on Dependents to complete before it proceeds
Task.Factory.StartNew(() =>
{
foreach (var child in item.Dependents)
{
Task.Factory.StartNew(child.DoWork, TaskCreationOptions.AttachedToParent);
if (child.Dependents.Count > 0)
DoWorkForTask(child);
}
item.DoWork();
}, TaskCreationOptions.AttachedToParent);
}
請注意,我讀過this thread,並沒有解決問題。
對不起,我加回原來的DoWorkForTask()。 –
@George:好的,很難掌握你在這裏所有的小部分,你能告訴我們一個簡短的*完整*程序,它演示了這個問題? –
我已經重新整理了整篇文章,希望更清楚! –