Асинхронное ожидание в linq selectC#

Место общения программистов C#
Ответить
Anonymous
 Асинхронное ожидание в linq select

Сообщение Anonymous »

Мне нужно изменить существующую программу, и она содержит следующий код:

var inputs = events.Select(async ev => await ProcessEventAsync(ev))
.Select(t => t.Result)
.Where(i => i != null)
.ToList();


Но мне это кажется очень странным, прежде всего использование async и await в select. Согласно этому ответу Стивена Клири, я смогу отказаться от них.

Затем второй Select, который выбирает результат. Разве это не означает, что задача вообще не является асинхронной и выполняется синхронно (столько усилий напрасно), или задача будет выполняться асинхронно, и когда она будет выполнена, будет выполнена остальная часть запроса?

Должен ли я написать приведенный выше код, как показано ниже, в соответствии с другим ответом Стивена Клири:

var tasks = await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev)));
var inputs = tasks.Where(result => result != null).ToList();


а это совсем то же самое?

var inputs = (await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev))))
.Where(result => result != null).ToList();


Пока я работаю над этим проектом, мне хотелось бы изменить первый пример кода, но я не слишком заинтересован в изменении (по-видимому, работающего) асинхронного кода. Может быть, я просто зря беспокоюсь, и все три примера кода делают одно и то же?

ProcessEventsAsync выглядит так:

async Task ProcessEventAsync(InputEvent ev) {...}


Подробнее здесь: https://stackoverflow.com/questions/350 ... inq-select
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»