Иногда нам нужно выполнять операции в выражениях LINQ с помощью асинхронных методов. Как насчет того, чтобы избежать блокировки с помощью асинхронных потоков?
Все, что нам нужно, это добавить в наше приложение пакет System.Linq.Async. Этот пакет позволяет использовать некоторые методы LINQ асинхронно, например Where, Select, Count и т. Д.
У методов из этого пакета будет суффикс Await. Это означает, что мы можем использовать ключевые слова async / await в наших выражениях LINQ. См. Код ниже:
Внутри нашего метода Main мы получаем набор чисел от метода GetRandomValuesAsync.
Этот метод возвращает нам тип IAsyncEnumerable с некоторыми числами. Прочтите эту статью, чтобы узнать об этом больше.
После получения коллекции мы выполняем некоторые математические вычисления с выражением LINQ, используя два подхода.
Первым мы вызываем метод GetSquared со свойством Task.Result в Оператор Select, чтобы создать новую коллекцию с желаемым результатом.
Как вы должны знать, нам нужно избегать использования Task.Result, чтобы не блокировать наше приложение. Затем, во втором подходе, мы снова вызываем метод GetSquared, но на этот раз с оператором SelectAwait .
На этот раз мы используем ключевые слова async / await в нашем выражении и избегаем блокировки нашего приложения.
Если вы запустите приведенный выше код, вы заметите, что у нас одинаковый результат для обоих подходов, но второй больше подходит для работы с асинхронными методами.
Я надеюсь, что это может быть вам полезно!
Как насчет того, чтобы купить мне кофе? : D
Ссылка: