Я работаю над консольным приложением C#, которое будет отвечать за запуск множества задач. Базовая структура для этого заключается в следующем:wait task in another task
var tasks = workItems.Select(x => Task.Factory.StartNew(() =>
{
DoSomeWork(x);
})).ToArray();
Task.WaitAll(tasks);
Проблема заключается в том, что DoSomeWork() представляет собой метод, который ожидает асинхронной результат другой задачи, которая также нуждается в ожидании вызова к API Facebook. http://facebooksdk.net/docs/reference/SDK/Facebook.FacebookClient.html#GetTaskAsync(string)
public async void DoSomeWork(WorkItem item)
{
var results = await GetWorkData();
}
public async Task<List<WorkData>> GetWorkData()
{
var fbClient = new FacebookClient();
var task = fbClient.GetTaskAsync("something");
var fbResults = await task;
};
Я думал, что я мог бы поддержать это понятие вложенных задач с вызовом Task.WaitAll(), но исполнение родительских задач заканчивается почти сразу. Помещение Console.ReadLine() в конце приложения для предотвращения его раннего запуска показывает, что результат действительно вернется позже из Facebook.
Я пропустил что-то очевидное или есть лучший способ блокировать мою коллекцию задач, которая позволит использовать этот сценарий?
Спасибо за быстрый ответ, который должен был быть легким. Чувствуя себя немного ржавым здесь хаха –