У меня есть следующий сценарий:Как использовать асинхронный/Await в сценарии с несколькими задачами, с каждой задачей, требующей новый асинхр/ждет
Клиент имеет ряд счетов, каждый из них имеет ряд карт, привязанные.
Теперь у меня есть запрос, где мне нужно запрашивать учетные записи с карточками у нескольких клиентов. У меня есть асинхронные методы для запроса учетных записей и карточек отдельно, то есть FindAccounts(string customer)
, FindCards(string[] accounts)
.
Так что у меня этот метод:
public async Task<Data> FindCustomersWithCards(string[] customers)
{
var accountsTasks = customers.Select(_service.FindAccounts);
var accounts = await Task.WhenAll(accountsTasks);
var cardsTasks = accounts.Select(_service.FindCards);
var cards = await Tasks.WhenAll(cardsTasks)
...
}
В то время как это будет работать у него есть проблема, которую вы должны ждать счетов всех клиентов, которые будут закончены до карты могут быть запрошены. Более эффективная реализация будет продолжаться и запрашивать карты для учетных записей клиентов, как только завершатся учетные записи для конкретного клиента (не дожидаясь других клиентов).
Мой вопрос в том, можно ли это сделать с async/await
. Я думаю, что смогу справиться с ContinueWith
, но я не на 100% уверен, что все в порядке, чтобы смешать async/await
с подходом ContinueWith
.
Вы правы, ContinueWith звучит так, как вы хотите. Вы создадите большую задачу «Получите учетную запись, а затем получите карты» для каждой учетной записи. – Juan
Как насчет смешивания двух подходов? Знаете ли вы о каких-либо недостатках? –
Да, я имел в виду смешение, вы можете ждать на ContinueWith, в основном вы можете ждать во всем, что возвращает Task и ContinueWith. Если вы покажете свои сигнатуры методов, я могу предоставить код oyu пример – Juan