C# Await Task | Async Task | Task WhenAll | C# Task Confusion

Поделиться
HTML-код
  • Опубликовано: 3 фев 2025

Комментарии • 70

  • @Revvora
    @Revvora Год назад +3

    Allah razı olsun o kadar araştırdım şu mevzuyu sizin gibi anlatan yok. Bazı yazılım hocaları konuları öyle anlatıyor ki "Bak ben bunları biliyorum ve gösteriyorum ama anlama" der gibi resmen anlamamızı nasıl zorlaştırırız diye gereksiz detayların içinde boğuyorlar insanları. Halbuki o detayları insan kullanmayı öğrendikten sonra kendisi deneyimleyerek çözebilir.

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      Estağfurullah. Umarım tam anlamıyla oturmuştur kafanızda bu konsept

  • @codeweh
    @codeweh Год назад +4

    Gerçekten şahane bir anlatım olmuş hocam. Ağzınıza sağlık çok teşekkür ederim gayet faydalı bir video olmuş.

  • @halilmertdeveli3846
    @halilmertdeveli3846 2 месяца назад +1

    bütün videoyu izledim , faydasını gördüm ve abone oldum, teşkkür ederim

  • @PIDOtomasyon
    @PIDOtomasyon Год назад +2

    Allah bin kere razı olsun, düzgün anlatan başka kimseyi göremedim...

  •  3 года назад +4

    Salih hocam, tertemiz ve emek verilmiş bir anlatım olmuş. Eline sağlık :)

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Teşekkür ederim. İyi seyirler.

  • @AbdullahBuyuktanir
    @AbdullahBuyuktanir 2 года назад +2

    Çok çok teşekkür ederiz. Çok verimli bir anlatımdı.

  • @teknolojiuzmaniburada
    @teknolojiuzmaniburada 3 года назад +1

    Bildirimi gördüğüm gibi yağmur yağıyor olmasına rağmen yine bir umut ışığı doğdu sanki 😊 çok teşekkür ederim hocam dün rica etmiştim. İyi ki varsınız hocam 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      Çok teşekkür ederim güzel dilekleriniz için, umarım faydalı olmuştur

  • @xetaixelilov5404
    @xetaixelilov5404 10 месяцев назад +1

    Allah razı olsun. Çox detaylı izah etdiniz.

  • @mehmetburakmustu
    @mehmetburakmustu 3 года назад +2

    Tarık Güney in meşhur olan asenkron programlama makalesi çok güzel bir şekilde neden asenkron programlama kullanmalıyızı anlatmış ancak burada teknik kısım çok daha güzel anlatılmış. Teşekkürler emeğinize sağlık.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      Çok teşekkür ederim. Async iletişimin önemli bir konu olduğunu düşünüyorum. Üzerinde gerekli zamanı harcamak lazım, ama önce iyi anlamak lazım :-)

    • @ermekbakyt5507
      @ermekbakyt5507 3 года назад +2

      @@TechBuddyTR Dogru nasil calistigi benim hala gizem! Thread pool nedir onu kim olusturuyor? Kac tane thread var ?(async/await bu concurrency mi dir?) MultiThreading ile async/await arasinda fark varmi? kafam karisti ))! Size cok tesekkur ederim cok faydali egitim veriyirsunuz!

  • @mr_philomath
    @mr_philomath Год назад +1

    Kral, bir konu ancak bu kadar iyi hafızalara kazınabilir.......

  • @ugursesen7629
    @ugursesen7629 3 года назад +1

    harikasın hocam , tam gaz devam derslere özlemiştik, ingiltere yaradı :) Allaha emanet ol, başarılarının devamını dilerim.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +2

      Teşekkürler, evet İngiltere yaradı 😊

  • @XYZ-bz8tf
    @XYZ-bz8tf 2 года назад +1

    Salih Bey ilk olarak bu kaliteli içerikler için çok teşekkür ederim. 2 gündür asenkron programlama ile ilgili denemeler yapıyorum. Kafama takılan bazı şeyler oldu. Bunları sormak istedim.
    3:20 de "Task'ler bizim için yeni bir thread yaratıyor" demişsiniz. Ben de notlarıma böyle aktarmışım. Emin olmak için tekrar izledim videonuzu demin.
    Soruma gelirsek, Cross Thread Error ile ilgili küçük bir deneme yaparken bir problemle karşılaştım. Yaptığım şey çok basit. Bir button'a click edildiği zaman yeni bir task içinden rengini değiştirmeye çalışıyorum. Burada amacım Cross Thread Error'u gözlemlemekti fakat beklediğim gibi bu hatayı almadım. Kodu da hemen aşağıya ekleyeyim.
    private async void btn_CrossThread_Click(object sender, EventArgs e)
    {
    await TestCrossThreadErrorAsync(btn_CrossThread);
    }
    private Task TestCrossThreadErrorAsync(Button crossErrorButton)
    {
    return Task.Run(() =>
    {
    crossErrorButton.BackColor = Color.GreenYellow;
    });
    }
    Beklediğim hatayı almayınca o zaman Task.Run( ) bize farklı bir thread oluşturmamış oluyor gibi algılıyorum. Aydınlatırsanız çok memnun olurum:)

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Doğru anlamışsınız ve testi de doğru yapmışsınız ancak BackColor yerine Text'i değiştirmeye çalışırsanız bahsettiğiniz hatayı alacaksınız, Color için neden hatayı almıyoruz ben de anlamadım :(

    • @XYZ-bz8tf
      @XYZ-bz8tf 2 года назад +1

      @@TechBuddyTR Canınız sağolsun. Çok güzel bilgiler elde ediyorum içeriklerinizden. Yeni videolarınızı dört gözle bekliyorum. İyi çalışmalar dilerim:)

  • @ayhanBabba
    @ayhanBabba 2 года назад +2

    Tebrik ederim gerçekten müthiş bir anlatım. Teşekkür ederim.

  • @TyfnCTN
    @TyfnCTN 3 года назад +1

    Emeğine sağlık çok başarılı bir anlatım olmuş

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Teşekkür ederim. İyi seyirler.

  • @ebubekirbastama
    @ebubekirbastama 3 года назад +1

    Ellerinize sağlık güzel bir video olmuş

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Teşekkür ederim, umarım faydalı olmuştur.

  • @tuncaydemirer
    @tuncaydemirer 2 года назад +2

    Güzel, anlaşılır bir örnek olmuş. Emeğinize sağlık.
    Bir şeyi netleştirmek için sormak istiyorum. Gerçek ortam bir projede örneğin api den gelen isteği
    1 - kaşıladığımızda, iş katmanındaki method a gönderirken async await kullanıyoruz.
    2 - iş katmanında karşılayan method içinde async await kullanıyoruz.
    3 - database katmanında karşılayan method içinde async await kullanıyoruz.
    burada bir senkron durumu var gibi anlıyorum.
    asenkron aslında, database katmanında database ile iletişim kuracak method ta çalışıyor. Ama database katmanındaki method a ulaşan tüm method larda async await kullanmak zorundayız. kodun syntax ı böyle. (buraya kadar doğru mu anlamışım)
    örneğin içerisinde sadece ürün listeleme işlemi olan bir istek gelsin. Bu istekte birbirine bağlı tüm method larımız aslında senkron çalışıyor. ama her method async await içeriyor. Bir süre sonra senkron çalışan ama asenkron yazılmış kod gibi mi oluyor. yanlış mı yorumladım ?

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +2

      metodların async olması, web api içerisindeki isteği karşılayan main thread'in kilitlenmesinin önüne geçiyor. 32768 thread otomatik olarak destekleniyor ama eğer async kullanmazsak, bu thread'i bizim işlemlerimiz bitene kadar kilitlemiş oluruz. Mesela 10sn süren bir sql sorgunuz var ve baştan sona sync metod kullanıyorsunuz. Aynı anda 32768 istek aldığında 10sn boyunca sistem başka kimseye cevap veremez olacaktır. Ama async kullanıldığında her thread de 32768 thread kullanılabilir olacaktır.

    • @tuncaydemirer
      @tuncaydemirer 2 года назад +1

      @@TechBuddyTR Şimdi daha iyi anladım. Cevabınız için, bilginizi paylaştığınız için teşekkür ederim.

    • @sadifeyldrm2878
      @sadifeyldrm2878 3 месяца назад

      Bu konuyu ben de bağdaştıramıyorum bir türlü. Açıklayabilecek biri varsa çok sevinirim.

  • @yasinvs
    @yasinvs 10 месяцев назад +1

    Hocam çok teşekkür ederim ☺️

    • @TechBuddyTR
      @TechBuddyTR  10 месяцев назад

      Rica ederim :) Her zaman

  • @emirhancifci4104
    @emirhancifci4104 3 года назад +5

    Salih hocam, dilinize sağlık güzel bir anlatım olmuş.Bir sonraki video içeriği Cancellation token olma şansı var mı ?

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +4

      Task ile ilgili toplamda 3 konu çekmeyi planlıyorum. Bir tanesi bu videoydu zaten, ikincisi WebApi lerde Task işlemleri ve üçüncüsü de CancellationToken olacak :-)

  • @NiyaziKeklik
    @NiyaziKeklik 2 года назад +1

    Konuyu anlamayan arkadaşlara bir tavsiye, bir üniversitenin online notlarından işletim sistemleri ders notlarını bulup bir okusun. İşletim sistemi, cpu çalışma prensibi, oi ve çevre birimleri konuları bilmeden anlaşılması zor olan bir konu. Ne zaman üniversitede bu dersi aldım. Kafamda bir ampul parladı. Herkese neyin ne olduğunu öğrenmeyi tavsiye ederim sağlıcakla.

    • @tnrfiles
      @tnrfiles Год назад

      geçmişte okuyup beğendiğiniz bir ünivesitenin yayını var mı önereceğiniz?

  • @teamoore
    @teamoore 3 года назад +1

    Teşekkürler

  • @oyunkompetan7123
    @oyunkompetan7123 2 года назад

    Yumurtaları kır ve Ocağı aç ikisi de 500ms olduğuna göre renklerin aynı anda değişmesi lazım ama değişmiyor. Burada bir bekleme Yumurta kırılıyor 500ms sonra Ocak açılıyor.
    Aynı anda çalışıyor olsa. En uzun sürecek olan ocak işlemi ile düşünürsek
    Ocak Aç 500
    Tava ısıt 1000
    Yağı dök 750
    Yumurta ekle 750 Buraya kadar toplam 3000 ms
    Pişir 200
    Servis Et 750 Burasıda 950 ms
    4500 ms sürüyor ama 3950 ms sürüyor Yani 1. grup yumurta kır işlemi bitmezse hiçbir işlem başlamaz. Geri kalanların önemi yok sanırsam.
    Yumurta kır 500
    Yumurta çırp 750
    Tuz ekle 200 Burasıda 1450 ms
    Toplam 5400 ms sync işlemi doğru
    Yumurta kır işlemi 5000 ms olsa Ocağı aç işlemi 5000 ms sonra başlar

  • @turkmen1453
    @turkmen1453 2 месяца назад

    Güzel bir video, projeyi nasıl indirebiloruz.

  • @melismr8885
    @melismr8885 3 года назад +1

    Teşekkürler hocam

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Teşekkür ederim. İyi seyirler.

  • @U_TAR
    @U_TAR 20 дней назад

    Hocam diğer videolarınızıda izledim bu kadar detaylı bilgileri nasıl öğrendiniz acaba iş tecrübesi mi hepsi?

    • @TechBuddyTR
      @TechBuddyTR  19 дней назад +1

      Merak diyelim, araştırma öğrenme huyum var.

  •  2 года назад +1

    Elinize sağlık. Fenerbahçe tabii ki :)

  • @soyermert
    @soyermert 2 года назад

    teşekkürler.

  • @bestekarx
    @bestekarx 2 года назад +1

    Harika..

  • @rahibjafarov9326
    @rahibjafarov9326 2 года назад

    Hocam, 15:20 de boyle olmali degilmi?
    // UI thread. ------------ ---------
    // Other thread. await------
    siz boyle demishsiniz:
    // UI -----------. ----------
    // T2 --------
    boyle oldugu zaman UI thread kitleniyor tekrardan.
    senaryo ben yazdigim gibi devam etmeyecekmi?

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +1

      Hayır, benim yazdığım yöntemde UI thread kilitlenmiyor. Başka bir threadin işini bitirip, o threading UI thread'e haber vermesi şeklinde gerçekleşiyor işlemler çünkü. O aradaki boşluğu kilitlenme veya bir bekleme gibi düşünmemek lazım :)

    • @rahibjafarov9326
      @rahibjafarov9326 2 года назад

      @@TechBuddyTR teşekkürler, hocam

  • @onur6253
    @onur6253 5 месяцев назад

    Sondaki problemi ConfigureAwait(true) ile çözebilir miydik?

    • @TechBuddyTR
      @TechBuddyTR  4 месяца назад

      ConfigureAwait(trıue) varsayılan değer zaten. Kullanmasak da true oluyor :=

  • @nitrogenius
    @nitrogenius 10 месяцев назад

    hocam yumurtaTaskGroup ile ocakTaskGroup Aynı anda başlıyor ama içindeki metodlar await ile birbirini bekliyor doğru mu anladım? Yani 2 task group içindeki işlemler paralel olarak aynı anda başladı ama await ile kodda verdiğimiz sırada ilerliyorlar bu şekilde mi yoksa taskgroup 1 deki işlemler tamamlanınca mı taskgroup 2 başlıyor?
    İlk senaryodaki durumda yumurtaTaskGroup içindeki metodlar tamamlanmadan ocakTaskGroup içindeki YumurtayıEkle metodunun başlama olasılığı yok mu? Burda bir mantık hatası mı var yoksa örnek diye mi böyle yaptık.
    Diğer bir sorumda api tarafında senkron olan metoda aynı anda kaç request geldiğinde main thread kitleniyor bunun bir limiti var mı yoksa cpu'ya göre değişiyor mu?
    Bunu sormamın sebebi çok fazla request almayan küçük çaplı projelerde bile async/await kullanmalı mıyız

    • @TechBuddyTR
      @TechBuddyTR  10 месяцев назад +1

      2 grup çalışmaya aynı anda başlıyor. ContinueWith içerisinde vermiş olduğumuz metodları await ile beklediğimiz için onların hepsi sırayla, biri bitince diğerine geçecek şekilde çalışıyor. WhenAll metodu ise taskların içindeki tüm taskların da bitmesini bekliyor. Haklısınız ilk grup tamamlanmadan, ikinci grup tamamlanabilirdi, bizim metodlardaki sürelerimiz sebebiyle sanırım bunu görmedik. Videoyu çekeli 2 sene olmuş, çok hatırlayamıyorum o zaman nasıl düşündüğümü :)
      Api tarafında da belli sayıda thread lerimiz var. Senkron metod çağrıları thread'leri bloke ettiği için o thread başka bir request'i karşılayamaz oluyor. Thread sayılarımız az olduğu için, onları verimli kullanmak adına async işlemleri tercih ediyoruz. Bunun bir sayısı limiti yok. Şu kadar request aldığında async kullanman lazım diyemeyiz ama en kısa tabirle, eğer bir noktada async kullanabiliyorsan %99 ihtimalle async kullanman sync olmasından daha verimli, hızlı ve güvenilir olacaktır :) Küçük büyük ayırt etmeden async kullanabiliriz gönül rahatlığıyla, kullanmalıyız da.
      Bunun dışında WebApi lerde Task ve Async kullanmakla ilgili şöyle bir video var, onu izleyebilirsiniz.
      ruclips.net/video/TJMhuvReTnQ/видео.html

  • @canerarifoglu4721
    @canerarifoglu4721 3 года назад +1

    Hocam selamlar, öncelikle video için teşekkürler. İlk task group olan yumurtaTaskGroup = await YumurtalariKirAsync() olarak yazdık ve ikinci task group olan ocakTaskGroup'a geçmeden önce teknik olarak yumurtaların kırılmasını bekliyor aslında. Çünkü YumurtalariKirAsync metodunun başında await vardı. Hocam ben Yumurtaları kırmasını beklemek istemiyorum iki task group'u da aynı anda çalıştırmak istiyorum o zaman YumurtalariKirAsync ve OcagiAcAsync metodlarının başlarındaki await keywordünü kaldırmam yeterli olur mu? Bu soruyu sormamdaki amacım örnekte verilen "yumurta kırma" olayı gerçek dünyada daha uzun sürelerde olabilir. Bu videodaki örnekte 1 saniyeden daha küçük süre verildiğinden dolayı sanki aslında peş peşe geliyormuş gibi görünüyor.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      Awaitleri kaldırabilirsiniz bu size Task tipinden dönecektir ama bu taskları da bir yerde beklemek gerekecektir. Bunları Task.WhenAll ile bekleyebiliriz

    • @nitrogenius
      @nitrogenius 10 месяцев назад

      sanki kod çalıştığında yumurtaTaskGroup ve ocakTaskGroup aynı anda çalışıyor gibi çünkü önce yumurtayı kır butonunun rengi değişiyor ardından ocağı aç butonun rengi değişiyor.

  • @utkugok5102
    @utkugok5102 2 года назад +1

    Hocam ui thread ile console app'te olan main-thread kilitlenmesi aynı olay mı?

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Console App'de bir UI thread olmadığı için bir thread kilitlenmesi yaşanmıyor. Console da zaten tek main thread çalışıyor default'ta ve bu thread içerisinde beklemeler olabilir ama bu kilitlenme anlamına gelmiyor :)

  • @teknolojiuzmaniburada
    @teknolojiuzmaniburada 3 года назад +2

    Hocam emeğinize sağlık. Task, senkron, asenkron konusunu ilk defa bu kadar temiz bir anlatımla dinleyebildim. Muhteşem olmuş. Ellerinize sağlık.
    Winforms ile microservice projemizdeki herhangi bir apinin metodunu da çağırmayı göstermeniz mümkün müdür? Ben bunda da çok sorun yaşıyorum maalesef. Hangi Client kütüphanesi nasıl kullanmam gerektiğini, ui katmanında apideki async metotları nasıl çağırıp içindeki veriyi alabileceğimi çözemedim hala. 🙏🙏🙏
    Düzeltme olarak ek bir sorum olacak hep kafama takılan. Addlog metodu içinde ilk satıra InvokeRequired kontrolu yaptınız. Bu kontrolden sonra lvLog.Items.Add yaptık. Peki o InvokeRequired kontrolünden sonra ekleme işlemi yapacak olduğumuzu hala o satıra gelmemiş olmasına rağmen ui nasıl algılayabilip InvokeRequired olduğu kararına varabiliyor? Bunu algoritmik mantık olarak anlayamıyorum ben. Bunun nasıl bir mantığı var hocam?

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      InvokeRequired property si, Uygulamanın kendisi tarafından set ediliyor. Biz invoke ile çağırmadığımız zaman true oluyor, invoke ile aynı metodu çağırdığımız zaman ise false oluyor. Biz ilk satırda invokerequired kontrol yapıyoruz eğer true ise, aynı metodu invoke ile tekrar çağırıyoruz. Bu da invokerequired ın false olmasını sağlıyor ve o if bloğuna girmiyor. Alt satıra geçip Items.Add i çağırıyor
      Windows form tarafında ise bir WebApi Client videosu çekerim 👍

    • @teknolojiuzmaniburada
      @teknolojiuzmaniburada 3 года назад

      @@TechBuddyTR çok teşekkür ederim hocam. Her zaman ki gibi aydınlandım 😊🙏🙏🙏

  • @ermekbakyt5507
    @ermekbakyt5507 2 года назад

    Merhaba! Concurrency ile multithreading arasinda ne fark var?

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +1

      Concurrency dediğimiz şey, birden fazla işlemin aynı anda olması demek. MultiThreading ise bu işlemleri aynı anda yapabilmemiz için kullandığımız bir yöntem. Yani birisi bu işin kendisi, diğeri ise tanımı :)

  • @alifurkangokce9852
    @alifurkangokce9852 3 года назад +1

    Klavye model marka nedir merak ettim :D

  • @AEK369_Nature
    @AEK369_Nature 7 дней назад

    tesekkurler hocam