Отложенное выполнение (deferred execution) и немедленное выполнение (immediate execution) - это два разных подхода к выполнению операций над данными в LINQ (Language Integrated Query) в C#.
Отложенное выполнение откладывает выполнение запроса до момента, когда результат запроса действительно понадобится. LINQ-запрос хранит только описание операций, но не выполняет их немедленно. Примеры отложенного выполнения в LINQ это методы Select
, Where
, Take
, Skip
.
Немедленное выполнение в свою очередь означает, что запрос будет выполнен сразу же при вызове операции LINQ. Результат запроса будет расчитан и сохранен в памяти. Примеры немедленного выполнения в LINQ это методы Count
, ToList
, First
, Single
.
Пример отложенного выполнения:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var query = numbers.Where(n => n > 2); // отложенное выполнение numbers.Add(6); foreach (var num in query) // здесь произойдет выполнение запроса { Console.WriteLine(num); // выводит числа 3, 4, 5, 6 }
Пример немедленного выполнения:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var count = numbers.Count(); // немедленное выполнение numbers.Add(6); Console.WriteLine(count); // выводит 5