Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
228 yazı bulundu #dotnet
C# Deadlock, SynchronizationContext ve ConfigureAwait
Backend SERİ 08

C# Deadlock, SynchronizationContext ve ConfigureAwait

Kendi tek thread'li SynchronizationContext'imizle .Result deadlock'unu gerçekten üretip bir bekçiyle durduruyoruz. await'in context'i nasıl yakalayıp Post ettiği, konsolda ve ASP.NET Core'da neden kilitlenmediği ama thread pool starvation riski, async all the way, kütüphane kodunda ConfigureAwait(false), tamamlanmış task'ta thread'in değişmemesi ve Task.Run ile sarmanın bedeli.

7 Kas 2026 9 dk 7
C# CancellationToken: İptal, Timeout ve Linked Token
Backend SERİ 07

C# CancellationToken: İptal, Timeout ve Linked Token

İptal .NET'te işbirliğine dayanır: token'ı alıp sormayan method durmaz. CancellationTokenSource ile CancellationToken'ın rolleri, token'ı alt katmana iletmek, CPU işinde ThrowIfCancellationRequested, Task.Run'a token vermeyince Faulted olan task, CancelAfter ve HttpClient.Timeout, linked token ile kullanıcı iptalini timeout'tan ayırmak, WhenAny kaybedenlerini durdurmak ve API tasarımı.

7 Kas 2026 9 dk 4
C# Task.WhenAll ve Task.WhenAny ile Eşzamanlı İşler
Backend SERİ 06

C# Task.WhenAll ve Task.WhenAny ile Eşzamanlı İşler

Async kod kendiliğinden eşzamanlı değildir: bağımsız işleri sırayla await etmek süreleri toplar. Önce başlatıp sonra beklemek, Task.WhenAll ile sonuçları sırayla almak, LINQ Select ile task'ları iki kez başlatma tuzağı, hata durumunda WhenAll'ın herkesi beklemesi, WhenAny ile ilk cevap ve timeout, kaybedenlerin çalışmaya devam etmesi ve bittikçe işlemek.

7 Kas 2026 9 dk 9
C# Async'te Exception: AggregateException ve WhenAll'daki Hatalar
Backend SERİ 05

C# Async'te Exception: AggregateException ve WhenAll'daki Hatalar

Async method'daki exception task'ın içine konur ve await anında orijinal tipiyle fırlar. Parametre kontrolünü çağrı anında fırlatmak, Wait/GetResult/await farkı, WhenAll'da bütün hatalara ve kısmi sonuçlara ulaşmak, iki overload'da farklı çıkan hata sırası, AggregateException.Handle ve gözlenmeyen task exception'ları.

7 Kas 2026 9 dk 7
C# async/await Nasıl Çalışır: State Machine ve Continuation
Backend SERİ 04

C# async/await Nasıl Çalışır: State Machine ve Continuation

await her zaman beklemez: bitmiş bir task'ta kod aynı thread'de devam eder. async kelimesinin aslında ne yaptığı, GetAwaiter/IsCompleted/OnCompleted adımları, elle yazılmış çalışan bir state machine, reflection ile derleyicinin ürettiği tipe bakmak (Debug'da class, Release'de struct), continuation'ın hangi thread'de çalıştığı ve awaitable pattern.

7 Kas 2026 10 dk 5
C# Task ve Task<T>: Sıcak Başlayan Bir Söz
Backend SERİ 03

C# Task ve Task<T>: Sıcak Başlayan Bir Söz

Async method çağrıldığı anda çalışmaya başlar; await bir işi başlatmaz, sonucunu bekler. Task'ın yaşam döngüsü ve Status değerleri, Task.FromResult ve TaskCompletionSource ile task üretmek, aynı task'ı iki kez await etmek, işleri önce başlatıp sonra beklemek ve Task.Factory.StartNew'un Task<Task> tuzağı.

7 Kas 2026 10 dk 7
C# Thread ve ThreadPool: APM ve EAP'den TPL'e Async'in Kısa Tarihi
Backend SERİ 02

C# Thread ve ThreadPool: APM ve EAP'den TPL'e Async'in Kısa Tarihi

Foreground ve background thread farkı, Thread class'ının sonuç ve hata taşıyamaması, 1000 thread ile thread pool'un gerçek ölçümü. Ardından .NET'in async yolculuğu: APM'in Begin/End çifti, EAP'nin Completed event'i, TPL'in Task'ı ve C# 5 ile gelen async/await.

7 Kas 2026 10 dk 6
C# Async Programlama Neden Var: Bloklamak, I/O ve Ölçek
Backend SERİ 01

C# Async Programlama Neden Var: Bloklamak, I/O ve Ölçek

Aynı 100 stok sorgusu async ile bir saniyede, thread'i bekleten kodla 8-9 saniyede bitiyor. I/O-bound ve CPU-bound iş farkı, bloklamanın UI'da ve sunucuda bedeli, thread pool starvation, async'in hız değil kapasite kazandırması ve sahte async tuzağı.

7 Kas 2026 9 dk 12
LINQ ve .NET 10: LeftJoin, RightJoin, Shuffle, Sequence ve Async LINQ
Backend SERİ 17

LINQ ve .NET 10: LeftJoin, RightJoin, Shuffle, Sequence ve Async LINQ

.NET 10'da LINQ: GroupJoin ve DefaultIfEmpty pattern'ının yerini alan LeftJoin ve RightJoin, deferred çalışan Shuffle, generic math üzerine kurulu Sequence ve InfiniteSequence, BCL'e giren System.Linq.AsyncEnumerable ve System.Linq.Async paketiyle yaşanan CS0121 çakışması; .NET 11'de gelecek FullJoin'e kısa bakış.

7 Kas 2026 10 dk 10
LINQ ve .NET 9: CountBy, AggregateBy ve Index
Backend SERİ 16

LINQ ve .NET 9: CountBy, AggregateBy ve Index

.NET 9'da LINQ: dictionary değil sequence döndüren CountBy, key bazında biriktiren AggregateBy ve GroupBy'a göre bellek farkının BenchmarkDotNet ölçümü, Select((x, i) => ...) yerine Index(), Queryable karşılıkları ve mutable seed tuzağı.

7 Kas 2026 11 dk 7
LINQ ve .NET 7–8: Order, Selector'süz ToDictionary ve Performans
Backend SERİ 15

LINQ ve .NET 7–8: Order, Selector'süz ToDictionary ve Performans

.NET 7'nin key selector istemeyen Order ve OrderDescending operatörleri, IComparable eksikliğinin ancak runtime'da patlaması, kültüre duyarlı ve ordinal string sıralama, .NET 8'in selector'süz ToDictionary'si ve BenchmarkDotNet ile ölçülen vectorize edilmiş Max/Sum ile Order ve OrderBy(x => x) farkı.

7 Kas 2026 10 dk 8
Gerçek Veriyle LINQ: JSON Dosyasından Okunan Siparişlerle Senaryolar
Backend SERİ 14

Gerçek Veriyle LINQ: JSON Dosyasından Okunan Siparişlerle Senaryolar

System.Text.Json ile dosyadan okunan siparişler üzerinde LINQ: büyük-küçük harf tuzağı ve JsonSerializerDefaults.Web, veriyi doğrulamak (tekrar eden, müşterisi olmayan, hatalı adetli kayıtlar), aylık ciro, en çok satanlar, GroupJoin ile müşteri raporu, JSON'a geri yazmak ve DeserializeAsyncEnumerable ile stream ederek okumak.

7 Kas 2026 12 dk 7
Blog Haritası