В моем приложении C# я смог запустить параллельные задачи, которые выполняют http-вызовы, а затем дождаться завершения всех из них.
var responseTasks = new List<Task<HttpResponseMessage>>();
// PostChanges makes an async http call and returns the task
responseTasks.Add(myServiceClient.PostChanges(json));
responseTasks.Add(myServiceClient.PostChanges(json));
responseTasks.Add(myServiceClient.PostChanges(json));
Task.WaitAll(responseTasks.ToArray());
Но что, если каждый из вызовов PostChanges полагается на вызов, который получает данные из HTTP-запроса? Какой самый простой способ создать метод, который инкапсулирует два вызова и возвращает запущенную задачу? Метод должен был бы выполнить оба запроса примерно так:
public Task<HttpResponseMessage> GetDataAndPostChanges(MyInput input)
{
var json = myServiceClient.GetData(input); // this call must complete first
var response = myServiceClient.PostChanges(json);
return response; // how to actually return a task immediately that does both calls?
}
Затем я бы хотел сделать параллельные вызовы этого метода и дождаться завершения всех из них.
var responseTasks = new List<Task<HttpResponseMessage>>();
// PostChanges makes an async http call and returns the task
responseTasks.Add(myServiceClient.GetDataAndPostChanges(input1));
responseTasks.Add(myServiceClient.GetDataAndPostChanges(input2));
responseTasks.Add(myServiceClient.GetDataAndPostChanges(input3));
Task.WaitAll(responseTasks.ToArray());