2015-01-03 3 views
2

Я немного смущен, как мне реализовать рабочий процесс нескольких асинхронных задач. Например, при запуске Task1, когда Task1 завершился, Task2 запущен, когда Task2 завершил запуск TaskN и т. Д.
Или другие слова - как асинхронная задача может уведомить родительскую задачу о его статусе? Я предполагаю, что могу использовать здесь TaskStatus, но не знаю, как именно. Я искал в MSDN, но нет полного примера такого шаблона.
P.S. Я редактирую свой вопрос, чтобы сосредоточиться на одном конкретном вопросе.Асинхронный шаблон - запуск задачи при выполнении предыдущей задачи

+0

Я не спускал вниз, но вы задали несколько вопросов, которые могли бы быть их собственным вопросом, потому что каждый из них требует достаточно подробного ответа. Выполнение нескольких задач параллельно: http://stackoverflow.com/q/12337671/84206 Обработка исключений: http://msdn.microsoft.com/en-us/library/dd537614(v=vs.110).aspx Есть много других вариантов: http://stackoverflow.com/questions/tagged/async-await – AaronLS

ответ

5

Если вы действительно хотите, чтобы ждать, чтобы начать task2, пока task1 завершается, один из способов не будет так:

Task<string> task1 = GetUsername(); 
string username = await task1; // blocks(or "waits") here until GetUsername returns 

Task<string> task2 = GetConfig(username); // since we have the return from above, we can pass it here 
string config = await task2 ; // blocks here until GetConfig returns 

Примечание в этом TASK1 и TASK2 не выполняются параллельно друг с другом, так как мы явно дождитесь завершения одного из них, прежде чем запускать другой, как вы просили. Хотя они асинхронны относительно потока, вызывающего их.

Если у вас есть List<Task> и вы хотите выполнить их последовательно, то подход будет другим, и выполнение их параллельно будет еще одним подходом.

Если вы посмотрите вокруг stackoverflow, вы увидите множество примеров использования некоторых методов, таких как Wait, WaitAll, WhenAll и т. Д., Которые могут позволить вам делать много разнообразных комбинаций вещей.

+0

Да, мне действительно нужно подождать, пока предыдущая задача не завершится, потому что она передает некоторые идентификаторы в базу данных, которые необходимы для следующей задачи. –

Смежные вопросы