Когда используется 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 утилизировать или это все еще рассматривается в контексте и заблокирует файл открытым, пока сама программа не будет закрыта?

Ответы на вопрос(1)

Ваш ответ на вопрос