Ho una domanda riguardante l'esecuzione differita e lo smaltimento dei dati.Quando si utilizza il rendimento all'interno di un'istruzione "using", quando si verifica Dispose?
consideri il seguente esempio:
private IEnumerable<string> 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++;
}
}
}
disposta la dichiarazione break
immediatamente causare il lettore in ParseFile
di disporre o è ancora considerata nel contesto e si blocca il file aperto fino a quando il programma stesso è chiuso?
Scrivi un'app per console rapida e scopri :) – jjxtra
Oh nota a margine, piuttosto che usare 'break' quando il contatore colpisce due, basta aggiungere un 'Take (2)' alla fine di 'ParseFile'. – Servy
Raccogli il libro di Jon Skeet "C# in Depth" se vuoi una spiegazione veramente buona di cosa succede nei blocchi iteratori, o semplicemente guarda le specifiche del linguaggio, come spesso suggerisce. –