Асинхронные стримы (IAsyncEnumerable)
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.09.21 06:00
Оценка:
Коллеги, кто уже гонял сабж в продакшн или достаточно внимательно в тестах?

Хочу понять, каковы накладные расходы.

Простой воображаемый пример — я, допустим, читаю данные из (относительно медленного) файла.
Можно сделать честный синхронный енумератор, который будет блокировать поток каждый раз, как нам надо пополнить буфер:
public IEnumerable<string> Lines
{ 
  get
  {
    while(true)
    {
      var s = _reader.ReadLine();

      if(s!=null) 
        yield return s;
      else
        break;
    }
  }
}


А можно попробовать поэкономить простаивающие потоки, и сделать
public IAsyncEnumerable<string> Lines
{ 
  get
  {
    while(true)
    {
      var s = await _reader.ReadLineAsync();

      if(s!=null) 
        yield return s;
      else
        break;
    }
  }
}

Внимание, вопрос: начиная с каких времён ожидания внутри ReadLine имеет смысл вторая схема?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.