Код: Выделить всё
public abstract class Example {
protected abstract Task GetItem();
public async IAsyncEnumerable Producer() {
while(true) {
yield return await GetItem();
}
}
public async Task Consumer()
{
await foreach(var item in Producer())
Console.WriteLine(item == null ? "hello" : "world); // Just print something silly to signify the JIT cannot optimise this away here
}
}
- Производитель публикует действительно очень большой элемент сразу после того, как Consumr начинает перечисление.
- Затем в течение следующего часа ничего не происходит, Производитель больше не производит предметов в течение этого времени.
Или сгенерированный перечислитель будет удерживать ссылку на первый элемент создается до тех пор, пока Producer фактически не выдаст второй элемент - то есть, по крайней мере, в течение часа?
Я знаю, что у SharpLab есть теоретический ответ, но если посмотреть на сгенерированные конечные автоматы , я, к сожалению, не очень надеюсь, что смогу это расшифровать..
Подробнее здесь: https://stackoverflow.com/questions/785 ... t-item-bef