- Projection, bir nesnenin yeni form bir nesneye dönüşümünü tanımlar.
- Projection, kullanarak orijinal türünüzden inşa edilmiş yeni bir tür oluşturabilirsiniz.
13 Ocak 2023 Cuma
Projection( Select, SelectMany )
Filtering ( Where, Take, Skip, Distinct, DistinctBy, OfType )
Where metodu bir predicate kabul eder. Bu predicaye uyan sonuçlar yeni bir enumeration olarak return edilir.
LINQ Nedir ?
- Tüm LINQ sorgularının üzerinde çalıştığı temel tür IEnumerable'dır.
- Tüm LINQ sorguları result olarak her zaman new object döndürür. Böylece orjinal enumeration mutable olarak kalacaktır. Yani üzerinde işlem yapılan yapı değişmemiş olacak.
IENUMERABLE
IEnumerable lazy evaluationdur. Yani ToList(), Count gibi operasyonları uygulamadan gerçek sonucu elde edemeyiz.(Materialization Conversion)
Yukarıdaki kodu incelersek eğer. evenNumbersın değereri en alttaki evenNumbers.Count() operayon çağrılana kadar oluşturulmayacağı için listeye eklenen 4 değeride hesaba katılmış olacaktır.LINQ'in gerçek gücü, birden çok operasyonu birleştirdiğinizde ortaya çıkacaktır.
12 Ocak 2023 Perşembe
List Of Collection
- Bir kolleksiyondan elemanları teker teker almak için bir metod tanımlayan bir interfacedir.
- Genellikle bir dizi elemanı döndüren metodların return typesi olarak kullanılır.
- Bu interface , bir koleksiyonun foreach döngüsünde(loop) kullanılmasına izin verir.
- Aynı zamanda neredeyse tüm LINQ işlemleri (Count(),Where(), Select() vs.) için base typedır.
- IEnumerable'ın doğası, Usera bir objeyi enumerate edebileceğini söylemektir. Bunu enumerationun sonuna gelene kadar bir sonraki elemena tek tek geçerek yapar.
- IEnumerable lazydir.
TASK
Task Nedir ?
Bir pizza yaptığımızı düşünelim. Tüm malzemeleriniz hazır, ancak pişirmeden önce hamurun bir süre kabarmasına izin vermeliyiz. Hamurun kabarmasını beklerken sofrayı kurmak ya da televizyon izlemek gibi başka şeyler yapabiliriz.
Daha teknik olarak: C#'ta bir Task, asynchronous operationu temsil eder. Senkronize koda benzer bir şekilde asenkron kod yazmanıza izin vererek okumayı ve bakımını kolaylaştırır.
Taskların multi threadlerle ilişkisi yoktur. Tasklar kendini call eden kodla aynı thread tarafındanda execute edilebilir yada ayrı bir thread tarafından da execute edilebilir. Thread seçimi , Taskların execute edilmesini yönetmekten sorumlu olan task scheduler tarafından belirlenir.
WebAssembly kullanan Blazor Client veya Promisleri içeren (Tasklara çok benzer) javascript gibi teknolojileri düşünün. Bu iki teknoloji yalnızca tek bir thread üzerinde çalışır. Yinede Taskları ve asenlron programlamayı kullanabilir.
Taskları Neden Kullanırız?
Taskların kullanılmasındaki ana sebep ölçeklendirmedir. Kesinlikle performans değildir.
Sonuç olarak, Tasklar C#'ta basit, Senkron benzeri bir sözdizimiyle eşzamansız(asenkron) kod yazmamıza izin veren önemli bir kavramdır. Tasklar ayrı threadler tarafından execute edilebilir ve performanstan çok ölçeklenebilirlik için kullanılırlar.
Async Await
Yukarıdaki async ve sync olan kodlar Hemen hemen aynı görünüyorlar, Hatta async olan daha complex görünsede yinede async olanı tercih etmeliyiz. Fakat tercih sebebimiz performans değildir.
Tercih sebebimiz async olanın daha iyi ölçeklenebilir olmasıdır. İlk olarak sync olan versiyonu inceleyelim. repository.GetById(...)'ye tetiklediğimizde , geçerli thread durur ve task bitene kadar beklemek zorundadır. Büyük olasılıkla asıl işi yapan bir DocumentDb veya SQL Server'ınız var. Ve bunlar local de değil, farklı bir makinedeler, yani sunucunuz cevap dönene kadar thread tam anlamıyla boşta kalıyor ve bekliyor.

