有人可以向我解释为什么我的 IEnumerable 没有延迟加载到 GetMessages().Take(5) 上吗?如果我调试foreach循环,它似乎一次延迟加载前5条消息,将它们添加到listBox1,但在这5条之后它将继续填充列表的其余部分(大约需要一分钟)在循环之后继续执行之前。
public void PopulateMessages()
{
foreach (string message in GetMessages().Take(5))
{
listBox1.Items.Add(message);
}
}
private static IEnumerable<string> GetMessages()
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
// The Message table has thousands of rows
SqlDataReader reader = new SqlCommand("SELECT * FROM Message", conn).ExecuteReader();
while (reader.Read())
{
yield return reader.GetString(0);
}
}
}
谢谢。