Как оценить список задач - PullRequest
0 голосов
/ 18 июня 2020

У меня есть 2 объекта: Topic.cs, Lecture.cs, модель: TopicModel.cs и вызов асинхронного репо repo.GetAllLecturesAsync(string topicId). Их содержимое интуитивно понятно.

Мне нужно асинхронно получить все лекции из класса репо и поместить их в модель topi c. У меня есть следующий код:

List<TopicModel> topicModels = topics.Select(async topic => new TopicModel
{
    Lectures = (await repo.GetAllLecturesAsync(topic.Id)).ToList()
}).ToList();

Этот код генерирует следующую ошибку:

"Cannot implicitly convert type 'List<Task<TopicModel>>' to 'List<TopicModel>'"

Как мне избавиться от промежуточного Task там?

Изменить:

topics - это тип List<Topic>.

GetAllLecturesAsync() возвращает Task<IEnumerable<Lecture>>.

TopicModel имеет единичное имущество public List<Lecture> Lectures{ get; set; }

1 Ответ

2 голосов
/ 18 июня 2020

Вы можете использовать Task.WhenAll:

TopicModel[] topicModels = await Task.WhenAll(topics
    .Select(async topic => new TopicModel
    {
        Lectures = (await repo.GetAllLecturesAsync(topic.Id)).ToList()
    }));

По умолчанию Task.WhenAll возвращает массив, но если требуется List, вы можете вызвать ToList для результата .

...