IEnumerableがGetMessages()。Take(5)に遅延ロードされない理由を誰かが説明してもらえますか?foreachループをデバッグすると、最初の5つのメッセージを一度に1つずつ遅延ロードして、それらをlistBox1に追加しているように見えますが、その後5つは、リストの残りの部分にデータを入力し続けます(1分ほどかかります)。ループの後で実行を続行する前。
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);
}
}
}
ありがとう。