IEnumerable<Task<Foo>> сделать Task<IEnumerable<Foo>>Представьте, что у вас есть коллекция идентификаторов и метод, возвращающий асинхронный результат:
public static Task<Foo> Read(int id);
Если вы вызовете этот метод для всех элементов коллекции, вы получите
IEnumerable<Task<Foo>>. Однако работать с таким типом неудобно. Желаемый результат — это Task<IEnumerable<Foo>>. В качестве решения можно использовать Traversals. Они полезны, когда нужно менять порядок вложенных структур данных, что облегчает работу с асинхронными вычислениями и сложными вложенными типами. В .NET это особенно актуально при работе с Task.
👉 Подробнее
