Tôi có câu hỏi về việc thực hiện hoãn lại và xử lý dữ liệu.Khi sử dụng lợi nhuận trong câu lệnh "đang sử dụng", khi nào Vứt bỏ xảy ra?
Hãy xem xét ví dụ sau:
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++;
}
}
}
sẽ báo cáo kết quả break
ngay lập tức gây ra cho người đọc trong ParseFile
để xử lý hoặc là nó vẫn được coi là trong bối cảnh và sẽ khóa các tập tin mở cho đến khi chương trình chính nó là đóng cửa?
Viết ứng dụng bảng điều khiển nhanh và tìm hiểu :) – jjxtra
Xin lưu ý rằng, thay vì sử dụng 'ngắt' khi bộ đếm truy cập hai, chỉ cần thêm' Take (2) 'vào cuối' ParseFile'. – Servy
Chọn cuốn sách "C# in Depth" của Jon Skeet nếu bạn muốn có một lời giải thích thực sự tốt về những gì xảy ra trong các khối lặp, hoặc chỉ xem xét thông số ngôn ngữ, như ông thường gợi ý. –