Когда используется yield в выражении «using», когда происходит удаление?
У меня есть вопрос относительно отложенного выполнения и удаления данных.
Рассмотрим следующий пример:
private IEnumerable ParseFile(string fileName)
{
using(StreamReader sr = new StreamReader(fileName))
{
string line;
while((line = sr.ReadLine()) != null)
{
yield return line;
}
}
}
private void LineReader(string fileName)
{
int counter = 0;
foreach(string line in ParseFile(fileName))
{
if(counter == 2)
{
break; // will this cause a dispose on the StreamReader?
} else
{
Console.WriteLine(line);
counter++;
}
}
}
Будет лиbreak
Заявление сразу же вызывает читателя вParseFile
утилизировать или это все еще рассматривается в контексте и заблокирует файл открытым, пока сама программа не будет закрыта?