РЕДАКТИРОВАТЬ: Если вы только что получили методы BeginXXX и EndXXX, см. этот вопрос о том, как превратить их в Task<T>
задачи - и , тогда остальная часть моего ответа будетбыть применимы.
В основном вам нужно TaskFactory<T>.FromAsync(...)
.
Вы можете использовать TaskEx.WhenAll
, что в конечном итоге будет Task.WhenAll
.
Обратите внимание, что это будет ждать всех задач, чтобы завершиться, даже если раньше возникла ошибка.
Поскольку у задач разные типы результатов, вам нужно будет их настроитьдля начала подождите, пока они все не закончат, затем возьмите результаты:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
await TaskEx.WhenAll(t1, t2, t3);
var result1 = t1.Result;
var result2 = t2.Result;
var result3 = t3.Result;
// Use the results
В качестве альтернативы, просто запустите задачи, с которых нужно начать, и ждите каждую из них отдельно.Обратите внимание, что задачи в TAP «горячие» - они запускаются, как только вы их создаете, а не когда вы их ожидаете.Так что это тоже будет работать - но на этот раз, если t1
выдает исключение, не будет ждать завершения t2
и t3
:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
var result1 = await t1;
var result2 = await t2;
var result3 = await t3;
// Use the results
I 'Мы писали об этом, сначала о ожидании нескольких задач в целом , а затем о исключениях при ожидании нескольких задач .