У меня проблемы с этим. У меня есть «WorkItem», который имеет метод DoWork. WorkItem может иметь зависимости, которые ДОЛЖНЫ завершаться раньше, чем это происходит, в противном случае он вызывает исключение.
Вот диаграмма, где каждый элемент (A, B, C и т. Д.) Является WorkItem. Таким образом, первыми элементами, не относящимися к званию, должны быть A, B, E, поскольку они не имеют зависимостей.
Поэтому я выбрасываю «G» в DoWorkForTask, но мое исключение выдает себя, доказывая, что, скажем, A и B не завершили до запуска C Весь крошечный проект запакован здесь.
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);
}
Обратите внимание, что я прочитал эту ветку , и это не решает проблему.