За все годы, что я использовал переполнение стека, я впервые отвечаю кому-либо, так как я думаю, что пришло время внести свой вклад в сообщество.Я надеюсь, что это полезно.
IAsyncEnumerable<T>
можно ожидать так же, как Task<T>
.Это не должно быть завернуто.Комментарий к вашему вопросу показывает, что вы можете потерять преимущество IAsyncEnumerable<T>
, если вы используете .Result.Select(u => new ContratoDTU(u)).ToList();
.Я согласен с тем, что .ToList()
является синхронным и будет блокироваться до его завершения.
При использовании переменных в вашем классе обслуживания ниже приведена краткая ревизия:
public async IAsyncEnumerable<ContratoDTO> ContratoServiceGetAll()
{
foreach (var u in await ContratoRepository.GetAllAsync())
yield return new ContratoDTO(u);
}
Кроме того, *Оператор 1013 * в вашем компоненте (при условии, что вы имели в виду .AsEnumerable()
из метода расширения Enumerable.AsEnumerable<TSource>(this IEnumerable<TSource> source)
) заставит представление в этот момент заблокировать выполнение запроса Model.Contractos
(опять же, если ContractoRepository.GetAllAsync()
возвращает IQueryable<T>
).
Излишне иметь .ToEnumerable()
, так как итерация начнется после оценки @foreach (var item in Model.Contractos)
.