Рефакторирование метода, возвращающего 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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