Mam pytanie dotyczące odroczonego wykonania i usuwania danych.Podczas korzystania z wydajności w ramach instrukcji "using", kiedy pojawia się Dispose?
Rozważmy następujący przykład:
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++;
}
}
}
Czy oświadczenie break
natychmiast spowodować, że czytelnik w ParseFile
zbyć lub jest nadal rozpatrywana w kontekście i zablokuje plik otwarty aż sam program jest zamknięty?
Napisz szybką aplikację konsolową i dowiedz się :) – jjxtra
Och notatką boczną, zamiast używać 'break' gdy licznik trafi dwa, po prostu dodaj' Take (2) 'na końcu' ParseFile'. – Servy
Odbierz książkę Jona Skeeta "C# in Depth", jeśli chcesz naprawdę dobrze wyjaśnić, co dzieje się w blokach iteratora, lub po prostu przejrzeć specyfikację językową, jak często sugeruje. –