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
17 yazı bulundu
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 5
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 1
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 2
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 2
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 3
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 5
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 1
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 2
C# async void ve Fire-and-Forget: Kaybolan Exception'lar
Backend SERİ 09

C# async void ve Fire-and-Forget: Kaybolan Exception'lar

async void method'dan çıkan exception neden try/catch'e gelmeden process'i çökertir ve async Task bunu nasıl çözer. Event handler'larda async void'in doğru kullanımı, List.ForEach ile gizli async void, beklenmeyen task'ın sessizce kaybolan hatası ve UnobservedTaskException, CS4014 uyarısı, hatayı log'a düşüren güvenli Forget extension'ı ve ASP.NET Core'da scope tuzağı.

7 Kas 2026 8 dk 2
C# ValueTask: Ne Zaman Task Yerine, Hangi Kurallarla
Backend SERİ 10

C# ValueTask: Ne Zaman Task Yerine, Hangi Kurallarla

Cache'ten senkron dönen bir async method Task<int> ile her çağrıda 72 byte ayırırken ValueTask<int> hiç ayırmaz. Debug ve Release ölçüm farkı, runtime'ın küçük sonuç cache'i, BenchmarkDotNet ile cache ve gerçekten asenkron yollar, ValueTask'ı iki kez await etmenin Channel üzerinde gerçek InvalidOperationException'ı, AsTask ve ne zaman ValueTask seçmeli.

7 Kas 2026 9 dk 2
C# IAsyncEnumerable, await foreach ve Async Dispose
Backend SERİ 11

C# IAsyncEnumerable, await foreach ve Async Dispose

Sayfalı bir API'den gelen kitapları Task<List<T>> ile toplamak ilk elementi en sona bırakır; async iterator ile yield return ve await bir aradayken ilk sayfa hemen akar. await foreach'in açılımı ve MoveNextAsync'in ValueTask'ı, EnumeratorCancellation ve CS8425, break'te çalışan finally, IAsyncDisposable ve await using, DeserializeAsyncEnumerable ve ASP.NET Core'da stream.

7 Kas 2026 9 dk 2
C# Paralellik: Parallel.For, Parallel.ForEachAsync, PLINQ ve Task.Run Ne Zaman
Backend SERİ 12

C# Paralellik: Parallel.For, Parallel.ForEachAsync, PLINQ ve Task.Run Ne Zaman

Parallel.ForEach'e async lambda verince neden hiçbir iş bitmiyor, concurrency ile paralellik farkı, Parallel.For ve thread-local toplama, .NET 6 Parallel.ForEachAsync ile sınırlı concurrency, PLINQ'te sıra, BenchmarkDotNet ile paralelliğin ne zaman kazandırıp ne zaman kaybettirdiği ve Task.Run'ın doğru yeri.

7 Kas 2026 15 dk 4
Blog Haritası