Рефакторирование метода, возвращающего iAsyncenumerable C#

Место общения программистов C#
Anonymous
Рефакторирование метода, возвращающего iAsyncenumerable

Сообщение Anonymous »

Можно ли легко рефакторировать метод, который возвращает iAsyncenumerable ?
Предположим, что у меня есть следующий код:

Код: Выделить всё

public async IAsyncEnumerable GetFoosFromFile(string filename)
{
using (FileStream fs = File.OpenRead(filename))
{
var items = JsonSerializer.DeserializeAsyncEnumerable(fs);
await foreach (var item in items)
{
yield return item;
}
}
}

public async IAsyncEnumerable GetFoosFromString(string inputString)
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(inputString ?? "")))
{
var items = JsonSerializer.DeserializeAsyncEnumerable(ms);
await foreach (var item in items)
{
yield return item;
}
}
}
Можно ли рефакторировать все в блоке «Использование на свой собственный метод? Что-то вроде этого: < /p>

Код: Выделить всё

public async IAsyncEnumerable GetFoosFromFile(string filename)
{
using (FileStream fs = File.OpenRead(filename))
{
yield return GetFoosFromStream(fs);
}
}

public async IAsyncEnumerable GetFoosFromString(string inputString)
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(inputString ?? "")))
{
yield return GetFoosFromStream(ms);
}
}

private async IAsyncEnumerable GetFoosFromStream(Stream inputStream)
{
var items = JsonSerializer.DeserializeAsyncEnumerable(ms);
await foreach (var item in items)
{
yield return item;
}
}
Я был совершенно неспособен сделать компилятор счастливым здесь, и из того, что я могу сказать взаимодействие между доходностью и ожиданием в основном делает это невозможным. Там нет шансов на то, чтобы все это сохранило в памяти. Следовательно, DeserializeaseAsyncemerable в первую очередь.


Подробнее здесь: https://stackoverflow.com/questions/797 ... numerablet

Вернуться в «C#»