Иногда нам нужно выполнять операции в выражениях 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

Ссылка:





GitHub - dotnet / reactive: Reactive Extensions для .NET
Поймайте нас в канале #rxnet по адресу http://reactiveui.net/slack NuGet v3 feed url ( VS 2015+)… github.com