CS29 - Lập trình bất đồng bộ Asynchronous, tạo phương thức asynchronous với async/await và task C#

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

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

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

    Các bạn đăng ký theo dõi ủng hô kênh nhé, cảm ơn các bạn ruclips.net/user/xuanthulab

  • @LearningEverything1001
    @LearningEverything1001 4 месяца назад +2

    Video tuy chỉ 43p, nhưng để những người mới học c# như mình hiểu được thì phải mất gấp mấy lần số 43p đó, kiến thức rất cô đọng và dễ hiểu nhưng để xem đến đâu hiểu luôn đến đó thì mình nghĩ rất ít người làm được như vậy, mình vừa xem vừa tua lại và ngẫm nghĩ từng câu nói của XuanThuLab mới hiểu và xem tiếp.

  • @ThanhHoang-dm5wk
    @ThanhHoang-dm5wk 3 года назад

    Rất cảm ơn kênh làm video rất dễ hiểu. cảm ơn bạn rất nhiều

  • @NghĩaNguyễnĐức-q8e
    @NghĩaNguyễnĐức-q8e Год назад +1

    Dễ hiểu quá a ạ , em cảm ơn a.

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

    Cảm ơn kênh bài giảng rất bổ ích

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

    Anh giảng hay quá

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

    Video rất hay và dễ hiểu, 1 video tương đương mấy giờ search google :)) cám ơn AD rất nhiều :D

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

    Anh dạy quá hay luôn😊

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

    Cảm ơn AD rất rất nhiều

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

    Bài này hay quá!!!

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

    cảm ơn sư phụ, đệ tử đã giác ngộ Async & Wait, đợi tu luyện thêm vài bộ chân kinh DotNet là có thể phi thăng thành Senior rồi :>>

    • @SonChuVan-f9y
      @SonChuVan-f9y Год назад

      em trình itern thì có nên học không ạ? hay ưu tiên những j đơn giản trước, cày đến đây rồi mà thấy a nói sợ quá:((

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

      @@SonChuVan-f9y uây bro cái này quan trọng đó, học sớm chứ đừng next nha

    • @DoanQuangThangQP
      @DoanQuangThangQP 9 месяцев назад

      @@SonChuVan-f9y bạn học đến dâu rồi bạn, mình cũng intern mới học tới đây, mình cùng học được k bạn

    • @LAnNguyen-ie8ix
      @LAnNguyen-ie8ix 2 дня назад

      @@SonChuVan-f9y mk intern cung dag cay a len fresher chua a

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

    hay quá bác, cám ơn bác

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

    thay day de hieu gia lun

  • @z2hteam147
    @z2hteam147 3 года назад +6

    Tutorial đúng, nhưng chưa đủ. TH này chạy trên Console, nó ko quan tâm đến thread UI. Bác nên bổ sung trường hợp chạy trên UI, khi lấy kết quả của 1 task, chúng ta không nên dùng task.Result, mà phải đợi task hoàn thành mới trả kết quả task.ConfigureAwait(false)
    Khuyến nghị nên dùng Task.WhenAll thay cho Task.WaitAll

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

      task.configureAwait(false) là gì bác ơi

    • @18.tranquangminhuc49
      @18.tranquangminhuc49 Год назад

      @@okebanei cái đó giúp bạn cải thiện hiệu suất á

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

    Hay qua anh

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

    hay quá a.

  • @HOA-NGUYEN-DEV
    @HOA-NGUYEN-DEV 2 года назад

    Cám ơn XuanThuLab.Như trong video anh có trình bày , khi call await thì sẽ trả về cho main thread , trường hợp muốn call nhiều await liên tục thì làm như thế nào a?

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

    Áp dụng cho Winform load Gridview thì như thế nào bác ^^ Ví dụ vừa load vừa hiển thị gridview

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

    Thanks ad ạ

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

    [KLQ] Cho em hỏi em có source .net có xài (.net standard vs net5.0) nhưng không biết run trên MacOS có ổn k ạ? Vì mình k xài .net framework và MacOs đã hỗ trợ .net. Em thấy clip thì a xài macos để code .net trên VS code. (Do em muốn mua macbook để code .net & flutter).

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

    thầy cho em hỏi tại sao return về task ngay lúc await thì không ảnh hưởng đến thread chính ạ

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

    Cảm ơn bác! Video rất chi tiết và dễ hiểu. Bác cho em hỏi có cách nào ngừng 1 task khi nó đang thực hiện không ạ ?

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

      xuanthulab.net/lap-trinh-bat-dong-bo-asynchronou-c-c-sharp-voi-bat-dong-bo-theo-mo-hinh-tac-vu.html#CancellationToken

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

    hi bác, bác đang đi làm với C# hả, mảng nào vậy bác ?

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

    20:40

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

    Anh cho em hỏi: nếu có nhiều task muốn sử dụng vòng lặp và truyền tham số cho task để start, chứ không khai báo thủ công thì làm sao?

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

      Anh không hiểu rõ ý của em, tuy nhiên để truyền tham số phức tạp cho Task có thể sử dụng kiểu vô danh chứa nhiều trường dữ liệu xuanthulab.net/kieu-vo-danh-va-kieu-dong-dynamic-trong-c-c-sharp.html
      var parameters = new
      {
      thamso1 = 1,
      thamso2 = "dfdsf"
      };
      Task task = new Task((dynamic thamso) => {
      var thamso1 = thamso.thamso1;
      var thamso2 = thamso.thamso2;
      }, parameters);

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

    Em đã xem video này khoảng 10 lần và em đã lập trình được async task như trong video.
    Em lập trình c# điều khiển giả lập Android các lệnh em xài chủ yếu là Image Search. Em cũng sử dụng async task để chạy nhiều tác vụ. Khi chạy với số ít giả lập (15 trở lại) thì có vẻ ok và không báo lỗi gì , nhưng khi chạy nhiều giả lập thì sẽ báo lỗi:
    Object is currently in use elsewhere
    Em đã thử dùng lock(){ } nhưng hiệu suất giảm đi rất nhiều (chỉ còn khoảng 20%) ạ.
    Anh có thể giúp em giải quyết vấn đề này không ạ. Em cảm ơn anh!
    Mong anh chị nào đi ngang qua cho em ý kiến để giải quyết vấn đề hoặc chỉ chỗ cho em tìm câu trả lời với ạ.

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

      1 năm rồi, giải quyết đc chưa bạn, share cho ae với =))

  • @Vimax0208
    @Vimax0208 7 месяцев назад

    em có 1 thắc mắc là nếu Async-await nhằm mục đích tạo ra các phương thức bất đồng bộ và chạy trên 1 thread riêng, nó có các tác vụ chờ nhưng không làm gián đoạn thread chính. Thì tại sao lại không tạo luôn Thread t = new Thread(..) để chạy mà cần Async - await. Mọi người giải thích giúp em vs ạ.

    • @tienn-f3w
      @tienn-f3w 3 месяца назад

      "Async-await nhằm mục đích tạo ra các phương thức bất đồng bộ và chạy trên 1 thread riêng" => sai
      - Async await chỉ là non-blocking (không chặn), giúp không phải chờ đợi vô nghĩa, thread sẽ được quản lý tự động
      "sao lại không tạo luôn Thread t = new Thread(..) "
      - Quản lý thread khó, số lượng thread quá nhiều => có khả năng bị treo app
      - Vì mỗi luồng thực hiện 1 nhiệm vụ => khó share data, dễ gây xung đột dữ liệu (2 thread cùng đọc 1 dữ liệu => có thể lỗi, 2 thread cùng sửa 1 dữ liệu => kết quả sai, xung đột điều khiển (ví dụ rõ nhất là singleton))

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

    Anh có thể giải thích sự khác nhau, ưu điểm, nhược điểm của async vs parallel không ạ ? Em cảm ơn anh.

    • @hungtran-uq4jk
      @hungtran-uq4jk Год назад

      2 cai nay khac nhau hoan toan sao ma so sanh duoc ban.

    • @hungtran-uq4jk
      @hungtran-uq4jk Год назад

      vi du ban so sanh: multi thread va multi process thi ok vi no cung huong den giai quyet cung 1 van de.

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

    Em chào mọi người, em đang học về async_await trong C#, em đang muốn gọi hai hàm async chạy song song với nhau và đây là code của em:
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    namespace async_await
    {
    class Program
    {
    public static async Task PrinColor(int seconds, string mgs, ConsoleColor color)
    {
    //int a = 123;
    Console.ForegroundColor = color;
    Console.WriteLine($"{mgs,10}.... Start");
    Console.ResetColor();
    for (int i = 0; i < seconds; i++)
    {
    Console.ForegroundColor = color;
    Console.WriteLine($"{mgs,10} {i,2}");
    Console.ResetColor();
    Thread.Sleep(1000);
    }
    Console.ForegroundColor = color;
    Console.WriteLine($"{mgs,10}.... End");
    Console.ResetColor();
    int a = await num();
    return a;
    }
    public static async Task num()
    {
    return 5;
    }

    static async Task Main(string[] args)
    {
    int number = 10;
    // Console.WriteLine("Truowsc" + number);
    Task a = PrinColor(5, "T1", ConsoleColor.Magenta);
    Task b = PrinColor(15, "T2", ConsoleColor.Green);
    var kq = await a;
    var kq1 = await b;
    // Console.WriteLine("Sau" + number);
    }
    }
    }
    Em không hiểu vì sao mà nó vẫn chạy đồng bộ từ Tast T1, T2 trong khi em đã để làm hàm async. Mong mọi người dành thời gian giúp em ạ! Em cảm ơn rất nhiều!!!

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

      đây nè em thêm chỗ này nhé
      await Task.Run(() =>
      {
      for (int i = 0; i < seconds; i++)
      {
      Console.ForegroundColor = color;
      Console.WriteLine($"{mgs,10} {i,2}");
      Console.ResetColor();
      Thread.Sleep(1000);
      }
      });

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

      @@utxitrum9578 sao phải thêm await Task Run thì nó mới ko đồng bộ vậy a, e tưởng class Async là nó k đồng bộ rồi chứ