Async ve await keylerinin temel amacı anlaşılması kolay ve geliştiriciyi Task sınıfının içeriğinden soyutlayarak daha rahat uygulama geliştirmesini sağlamaktır. Çalışma mantığı Task Koordinasyonu yazımda anlattığım ContinueWith metoduna benzer. Amacı main thread i bekletmeden işlem yapabilmektir.

Kullanımı oldukça basittir; işlemin yapılacağı metod async keyi ile tanımlanır ve içerisinde awaitable olan (Geriye…

cottonbro adlı kişinin Pexels’daki fotoğrafı

Paralel programlamada koleksiyonlarla çalışırken, ihtiyacımıza göre Task oluşturabilir ve bu tasklerin özelliklerini kullanabiliriz. Ancak koleksiyonların boyutları büyüdükçe, iterasyon içerisinde yapılan işlemler arttıkça bu taskleri yönetmek zorlaşacak ve optimizasyon ihtiyaçları artacaktır, bu yüzden .net framework içerisinde koleksiyonlarla çalışmak için optimize edilmiş sınıf, extension ve metotları kullanmak daha sağlıklı olacaktır.

Paralel döngüler…

Tasklerin belirli bir sıra ile çalışmasını temsil eden zincir görseli.
Joey Kyber adlı kişinin Pexels’daki fotoğrafı

Paralel bir uygulama geliştirirken tasklerin belirli bir sıra ile çalışmasına, bir task içerisinde oluşturulan bir veriye başka bir task içerisinde erişmeye ihtiyaç duyabiliriz. Bunun gibi ihtiyaçlar için .net framework üzerinde birden fazla çözüm mevcut.

Continuation

Bir işin tamamlanmasının ardından yeni bir işe başlanması olarak özetleyebiliriz, .net ortamında bunu sağlamak için…

Breakingpic adlı kişinin Pexels’daki fotoğrafı

Producer consumer pattern, adından da anlaşılacağı gibi, bir yandan yeni bir iş üretirken diğer yandan o işleri tamamlamaya yarayan bir yaklaşımdır. .Net ortamında bu implementasyonu BlockingCollection sınıfı ile ile oldukça basit bir şekilde yapabiliriz.

BlockingCollection ile bir koleksiyona belirtilen bir limit dahilinde bir yandan eleman eklerken diğer yandan o elemanlar…

Yığını temsil eden üstüste konulmuş bozuk paralar ve arka planda bir saat olan görsel.
Pixabay adlı kişinin Pexels’daki fotoğrafı

Single thread bir uygulamada çalışıyorken, bir koleksiyonu yönetmek oldukça kolaydır. Ancak paralel bir uygulamada bir koleksiyon ile çalışırken hangi taskin önce müdahale edeceğini bilmiyoruz. Bu tarz durumlarda taskler arası veri paylaşımından bahsettiğim bu yazımdaki yöntemlerden herhangi biri kullanılabilineceği gibi System.Collections.Concurent namespace altındaki Enumarable implementasyonları da kullanılabilinir.

En çok kullanılan koleksiyon…

Klasik işletim sistemlerinde bir kaynak T zamanda yalnızca bir process tarafından kullanılabilinir, ancak yazılım geliştirirken aynı dosyaya farklı threadler içerisinde, hatta aynı dosyaya farklı uygulamalar üzerinden erişmeye ihtiyacımız olabilir, bu yazımda Mutex sınıfını kullanarak farklı uygulamalar üzerinden aynı dosyaya güvenli bir şekilde erişmekten bahsedeceğim.

İçeriğe başlamadan önce Mutex ve diğer…

Tasklerin eş zamansız çalıştığını ve hangi taskin daha önce tamamlanacağını bilmiyoruz, bir geliştirici için bu senaryo başlı başına bir problemken bir de ne zaman çalışacağını bilmediğiniz iki ayrı task içerisinde aynı veriye erişme ihtiyacını düşünün.

Başlamadan önce bahsetmek istediğim iki terim var.

  • Atomic Operation
  • Critical Section

Antik Yunanca’daki ‘atomos’ kelimesinden…

İlker Erhalim

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store