Код: Выделить всё
IAsyncEnumerableЕсли вы используете IAsyncEnumerable, полученный из сетевого ресурса как и в случае с потоком GRPC, вы получите сообщение об ошибке, если попытаетесь использовать поток дважды, чего я и ожидал.
То же самое происходит и в следующем коде, для второго foreach code> Я ожидал, что он выкинет - но это не так он возвращает полный поток дважды!
Код: Выделить всё
var stream = GetStream();
await foreach (var item in stream)
{
Console.WriteLine(item);
}
await foreach (var item in stream)
{
Console.WriteLine(item);
}
async IAsyncEnumerable GetStream()
{
await Task.CompletedTask;
yield return "yes";
yield return "no";
yield return "maybe";
}
Я столкнулся с этой проблемой, потому что писал интеграционный тест для кода, который использует IAsyncEnumerable , который в производстве является результатом вызова GRPC, но для тестирования я создал его, как указано выше. Производственный код ошибочно читал поток дважды и выдавал ошибку, но из-за такого поведения это не отображалось в моем интеграционном тесте.
Как я мог заставить свой поток в памяти вести себя как сетевой поток?
Подробнее здесь: https://stackoverflow.com/questions/792 ... -of-stream
Мобильная версия