В этой статье вы узнаете о C # Async Stream и статических локальных функциях.
Асинхронные потоки
Помимо других функций, асинхронные потоки также являются одной из важных функций, представленных в C # 8. Он обеспечивает возможность асинхронного доступа к потоку данных, который был недоступен ранее. Теперь вы можете создавать и использовать потоки асинхронно.
Асинхронные потоки имеют следующие характеристики.
- Он объявлен с модификатором async и возвращает IAsyncEnumerable <T>.
- Метод содержит операторы yield return для возврата последовательных элементов в асинхронном потоке данных.
Модель программирования, основанная на async и await, была одним из основных нововведений C # 5, а async streams — еще одним усовершенствованием над шаблоном async и await для более интуитивного написания асинхронного кода. С помощью асинхронных потоков разработчик теперь может легко реализовать асинхронные потоки данных, а также выполнять итерацию асинхронно с помощью цикла foreach. Это возможно благодаря введению новых интерфейсов IAsyncEnumerable <T> и IAsyncDisposable <T>.
Давайте посмотрим на приведенный ниже код, чтобы понять, как работать с асинхронными потоками.
Вывод приведенного ниже кода генерируется следующим образом.
IAsyncEnumerable используется с yield return, а затем вы можете использовать поток данных с помощью await foreach.
Хотя этот код чрезвычайно понятен для разработчика C#, компилятор генерирует большой объем кода для реализации асинхронного поведения, но вся дополнительная сложность абстрагируется от вас, чтобы позволить компилятору выполнять тяжелую работу, а вы можете сосредоточиться на написании логики приложения.
Статические локальные функции
Локальные функции были введены в C# 7, а статические локальные функции — еще одно усовершенствование в C# 8.
Локальная функция экземпляра может получить доступ к переменным родительского метода, а статический локальный метод — нет. Давайте посмотрим на следующий пример, чтобы понять разницу между локальными и статическими локальными функциями.
Оба метода в приведенном выше коде возвращают один и тот же результат, однако, как вы можете видеть, метод StaticLocalMethod не использует переменную экземпляра x и вместо этого должен был объявить локальную переменную num. Если он пытается использовать переменную x, возникает ошибка времени компиляции, поскольку «Статическая локальная функция не может содержать ссылку на x».
С другой стороны, обычный локальный метод InstanceLocalMethod может использовать переменную экземпляра x.
Резюме
В этой статье мы узнали о локальных функциях AsyncStream и Static и для чего они нужны. Мы рассмотрели, как можно использовать AsyncStream для добавления мощи асинхронности в коллекции. StaticLocalMethod также является новым дополнением в категории локальных функций. Очевидно, что эти новые функции представляют собой большую ценность для разработчиков.