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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ก.พ. 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 th-cam.com/users/xuanthulab

  • @LearningEverything1001
    @LearningEverything1001 5 หลายเดือนก่อน +3

    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.

  • @NghĩaNguyễnĐức-q8e
    @NghĩaNguyễnĐức-q8e ปีที่แล้ว +1

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

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

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

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

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

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

    Anh giảng hay quá

  • @Administrations
    @Administrations ปีที่แล้ว

    Anh dạy quá hay luôn😊

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

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

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

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

      @@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 26 วันที่ผ่านมา

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

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

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

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

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

  • @ddthon
    @ddthon ปีที่แล้ว

    thay day de hieu gia lun

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

    hay quá a.

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

    Hay qua anh

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

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

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

    Thanks ad ạ

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

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

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

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

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

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

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

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

  • @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 2 ปีที่แล้ว

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