Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 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