День 1456. #ЗаметкиНаПолях
Используем Асинхронные Потоки в .NET Framework
Хотя IAsyncEnumerable доступен только в C#8 и поддерживается в .NET Core 3.x и .NET Standard 2.1, это вовсе не означает, что вы не можете использовать эту функцию в .NET Core 2.x или .NET Framework.
Рассмотрим следующий (не компилирующийся) код в проекте .NET 4.7 и попробуем заставить его работать:
async IAsyncEnumerable<string> GetAsync()
{
for (var i = 0; i < 20; i++)
{
var item = await ReadAsync(i);
yield return item;
}
}
async Task<string> ReadAsync(int i)
{
await Task.Delay(100);
return $"Count {i}";
}
Проект .NET Standard 2.0 не знает об интерфейсе IAsyncEnumerable. Поэтому первое, что нам нужно сделать, это установить NuGet-пакет Microsoft.Bcl.AsyncInterfaces.
Теперь компилятор находит интерфейс IAsyncEnumerable, но Visual Studio по-прежнему жалуется, потому что выбранная версия языка C#7.3, а асинхронные потоки — это функция C#8.
Мы можем это исправить, обновив файл .csproj проекта и указав компилятору использовать C#8 в качестве версии языка:
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
…
<LangVersion>8</LangVersion>
</PropertyGroup>
Подробнее об использовании новых функций языка C# на старых платформах в этом посте.
Источник: https://bartwullems.blogspot.com/2020/01/asynchronous-streams-using.html