Yield Keyword’ü Nedir ?
Yield keyword’ünün kullanımına baktığımızda aslında arkasında bir compiler sihrinin yattığını görüyoruz. Bu nedenle de belki de yield keyword’ü genel olarak pek fazla developer tarafından bilinmemekte.
Yield keyword’ünün kullanımını incelediğimizde iki farklı kullanım şeklinin olduğunu görmekteyiz.
Bunlar,
- yield return <ifade>
- yield break
Yield return ifadesi ile iterator’a çağrı yapılan foreach döngüsüne bir eleman döndürülürken yield break ifadesi ile de artık bulunan iterator içerisindeki iterasyonun sona erdiği bilgisi iterator’ı çağıran foreach döngüsüne iletilmekte. Compiler yield keyword’ünü gördüğü anda bu keyword’ün bulunduğu bloğun bir iterator bloğu olduğunu algılamakta. İşte bu noktada foreach döngüsü tarafından ReturnYield() isimli iterator metodu her çağrıldığında metot içerisindeki bir yield return ifadesi çalıştırıldıktan sonra ilgili değer foreach ifadesine döndürülmeden önce compiler, iterator metodun kaldığı yeri saklamakta. Daha sonra ise foreach ifadesinden iterator metoduna gelen her istekte iterator metot baştan başlamak yerine kaldığı yerden işletilmekte.
Referans : https://www.ilkayilknur.com/c-iteratorsyield-keywordu-ve-arka-planda-neler-oluyor
Aşağıfa 3 tane metod tanımladık ve bu metodlar bize geriye 5 milyon kayıtlı bir List dönüyor. Bir tane metodumuz yield keywordünü kullanarak listeyi döndürüyor. Bir tane metodumuza ilk başta eleman sayısı veriliyor diğer metodumuza ise herhangi bir count verilmiyor. For düngüsü kadar eleman alacak. Şimdi bu metodları Benchmark testine tabi tutalım.


Sonuç olarak yield motodun çok daha performanslı olduğu ve çok az bellek tükettiği gözlemlenmektedir.
