Коллеги, кто уже гонял сабж в продакшн или достаточно внимательно в тестах?
Хочу понять, каковы накладные расходы.
Простой воображаемый пример — я, допустим, читаю данные из (относительно медленного) файла.
Можно сделать честный синхронный енумератор, который будет блокировать поток каждый раз, как нам надо пополнить буфер:
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 имеет смысл вторая схема?