Если вы хотите заблокировать текущий поток до завершения всех задач, вы можете просто использовать Task.WaitAll()
, не нужно использовать задачи продолжения.Но имейте в виду, что заблокированный поток - это поток, который не использует ничего, кроме использования ресурсов (например, памяти).Блокировка потока часто проще, но менее эффективен.
Код может выглядеть следующим образом:
// run the tasks
Task.WaitAll(getPlatformTask, getUserTask);
// process the results
return base.SendAsync(request, cancellationToken);
И нет, в вашей версии последняя строка может (искорее всего, выполнится до того, как все задачи будут выполнены.ContinueWhenAll()
не блокирует, вот и весь смысл.
РЕДАКТИРОВАТЬ: Я только что понял, что ваш метод возвращает Task
.Таким образом, вам на самом деле не нужно блокировать поток, вместо этого вы можете вернуть Task
, который завершен, когда вся работа завершена.Это может выглядеть так:
// run the tasks
var result = Task.Factory.ContinueWhenAll(
new[] { getPlatformTask, getUserTask },
_ =>
{
// process the results
return base.SendAsync(request, cancellationToken);
});
return result.Unwrap();
Здесь result
- это Task<Task<HttpResponseMessage>>
, но вам нужно просто Task<HttpResponseMessage>
.Для этого вы можете использовать метод Unwrap()
.