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

แชร์
ฝัง
  • เผยแพร่เมื่อ 7 ม.ค. 2025

ความคิดเห็น • 67

  • @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 หลายเดือนก่อน +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...

  • @AbdullahBuyuktanir
    @AbdullahBuyuktanir 2 ปีที่แล้ว +2

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

  • @xetaixelilov5404
    @xetaixelilov5404 9 หลายเดือนก่อน +1

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

  •  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.

  • @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:)

  • @mr_philomath
    @mr_philomath ปีที่แล้ว +1

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

  • @mehmetburakmustu
    @mehmetburakmustu 3 ปีที่แล้ว +1

    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!

  • @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

  • @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ı 😊

  • @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.

  • @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.

  • @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

  • @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 11 หลายเดือนก่อน

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

  • @yasinvs
    @yasinvs 9 หลายเดือนก่อน +1

    Hocam çok teşekkür ederim ☺️

    • @TechBuddyTR
      @TechBuddyTR  9 หลายเดือนก่อน

      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 :-)

  • @turkmen1453
    @turkmen1453 หลายเดือนก่อน

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

  • @teamoore
    @teamoore 3 ปีที่แล้ว +1

    Teşekkürler

  • @melismr8885
    @melismr8885 3 ปีที่แล้ว +1

    Teşekkürler hocam

    • @TechBuddyTR
      @TechBuddyTR  3 ปีที่แล้ว

      Teşekkür ederim. İyi seyirler.

  • @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

  • @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 :)

  • @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 9 หลายเดือนก่อน

      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.

  • @nitrogenius
    @nitrogenius 9 หลายเดือนก่อน

    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  9 หลายเดือนก่อน +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.
      th-cam.com/video/TJMhuvReTnQ/w-d-xo.html

  • @onur6253
    @onur6253 4 หลายเดือนก่อน

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

    • @TechBuddyTR
      @TechBuddyTR  3 หลายเดือนก่อน

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

  • @alifurkangokce9852
    @alifurkangokce9852 3 ปีที่แล้ว +1

    Klavye model marka nedir merak ettim :D

    • @TechBuddyTR
      @TechBuddyTR  3 ปีที่แล้ว

      Rampage Rainbow serisi

  • @bestekarx
    @bestekarx ปีที่แล้ว +1

    Harika..

  • @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ı :)

  •  2 ปีที่แล้ว +1

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

  • @soyermert
    @soyermert 2 ปีที่แล้ว

    teşekkürler.

  • @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 😊🙏🙏🙏