Я выполняю запрос, который возвращает примерно 11 000 строк. Каждая из этих строк сопоставлена с уникальным POCO, для создания которого я написал облегченную ORM, называемую ToCustomObject. Прямо сейчас у меня уже есть асинхронный метод, который получает результаты этого запроса и помещает их в DataTable. Затем я просматриваю все строки и вызываю для них ToCustomObject, чтобы сгенерировать свой объект, а затем добавляю его в List. Сам запрос занимает всего полсекунды, но цикл генерации всех моих POCO занимает несколько секунд.
Код: Выделить всё
public async Task GetFoosAsync()
{
//empty list to populate and return
List foos = [];
//example, this is not how the query actually executes, do not need assistance with this part
string query = "select t.Field1, t.Field2 from Table";
DataTable results = await customDbHandlerThatsNotRelevant.ExecuteQueryAsync(query);
//async way to handle this?
foreach (DataRow row in results.Rows)
foos.Add(row.ToCustomObject());
return foos ;
}
Я думал о том, чтобы использовать Task.WhenAll(), чтобы поместить все поколения в список задач и выполнить таким образом, но foos.Add() не ожидается. Я также изучил Parallel.ForEach(), но я не так хорошо с этим знаком и, насколько я могу судить, не смог бы выполнить то, что пытаюсь сделать.
TL;DR: Как я могу сделать так, чтобы все вхождения foos.Add(row.ToCustomObject()); происходили асинхронно?>
Подробнее здесь:
https://stackoverflow.com/questions/788 ... o-to-listt