LINQ'te deferred execution nedir? Aşağıdaki kodun çıktısı ne olur?
Cevap
LINQ sorgularının çoğu (Where, Select, OrderBy...) tanımlandığı anda çalışmaz; yalnızca bir "tarif" oluşturur. Sorgu, sonuç üzerinde enumerate edildiğinde (foreach, ToList(), Count(), First()) çalışır. Buna deferred execution denir.
var numbers = new List<int> { 1, 2, 3 };
var query = numbers.Where(n => n > 1);
numbers.Add(4);
Console.WriteLine(string.Join(",", query)); // ?
Console.WriteLine(query.Count()); // ?Çıktı:
2,3,4
3Where filtrelemesi Add(4)'ten sonra, enumerate edilirken çalıştığı için 4 de sonuca girer.
Tuzak: çoklu enumeration
IEnumerable<User> active = users.Where(u => IsActiveExpensive(u));
if (active.Any()) // 1. çalıştırma
foreach (var u in active) ... // 2. çalıştırmaSorgu her enumeration'da baştan çalışır. EF Core'da bu, aynı SQL'in iki kez veritabanına gitmesi demektir. Sonuç birden fazla kullanılacaksa bir kez ToList() ile materialize edin.
Immediate execution yapan operatörler
ToList, ToArray, ToDictionary, Count, Sum, Max, First, Single, Any, All. Bunlar sorguyu hemen çalıştırır.
Closure tuzağı
Sorgu, yakaladığı değişkenin çalıştırma anındaki değerini kullanır:
int min = 1;
var q = numbers.Where(n => n > min);
min = 3;
q.ToList(); // [4] : min artık 3Kendi yield return kullanan metotlarınız da deferred çalışır; argüman doğrulaması bile ilk MoveNext'e kadar ertelenir.
İlgili C# & .NET soruları
- .NET'te Garbage Collector nasıl çalışır? Generation'lar, Large Object Heap ve IDisposable ilişkisini açıklayın.
- EF Core'da change tracking nasıl çalışır? AsNoTracking ne zaman kullanılır ve N+1 problemi nasıl önlenir?
- IEnumerable<T> ile IQueryable<T> arasındaki fark nedir? EF Core'da yanlış kullanım ne gibi sorunlara yol açar?
- async/await kullanırken .Result veya .Wait() çağırmak neden deadlock'a yol açabilir? ConfigureAwait(false) ne işe yarar?
- ASP.NET Core DI'da Transient, Scoped ve Singleton lifetime'ları arasındaki fark nedir? Captive dependency nedir?
- ASP.NET Core'da middleware pipeline nasıl çalışır? Use, Run ve Map farkı nedir, sıralama neden önemlidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.