У меня есть класс, который возвращает IEnumerable. Затем я выполняю эти задачи по порядку. Допустим, класс - TaskProvider.
public class TaskProvider {
public IEnumerable<Task> SomeThingsToDo() { return work; }
}
Я выполняю это со следующим:
public void ExecuteTasks(IEnumerable<Task> tasks)
{
var enumerator = tasks.GetEnumerator();
ExecuteNextTask(enumerator);
}
static void ExecuteNextTask(IEnumerator<Task> enumerator)
{
bool moveNextSucceeded = enumerator.MoveNext();
if (!moveNextSucceeded) return;
enumerator
.Current
.ContinueWith(x => ExecuteNextTask(enumerator));
}
Теперь у меня есть ситуация, когда у меня может быть несколько экземпляров TaskProvider, каждый из которых генерирует список задач. Я хочу, чтобы каждый список задач выполнялся по порядку, а это означает, что все задачи одного поставщика заканчиваются до запуска следующего.
Тогда, самое главное, мне нужно знать, когда все задачи будут выполнены.
Какой способ TPL это сделать?
(FWIW, я использую Async CTP для Silverlight.)