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.
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
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?
[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).
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);
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 ạ.
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 ạ.
"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))
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!!!
đâ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); } });
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
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.
Rất cảm ơn kênh làm video rất dễ hiểu. cảm ơn bạn rất nhiều
Dễ hiểu quá a ạ , em cảm ơn a.
Cảm ơn kênh bài giảng rất bổ ích
Anh giảng hay quá
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
Anh dạy quá hay luôn😊
Cảm ơn AD rất rất nhiều
Bài này hay quá!!!
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 :>>
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á:((
@@SonChuVan-f9y uây bro cái này quan trọng đó, học sớm chứ đừng next nha
@@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
@@SonChuVan-f9y mk intern cung dag cay a len fresher chua a
hay quá bác, cám ơn bác
thay day de hieu gia lun
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
task.configureAwait(false) là gì bác ơi
@@okebanei cái đó giúp bạn cải thiện hiệu suất á
Hay qua anh
hay quá a.
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?
Á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
Thanks ad ạ
[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).
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 ạ
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.net/lap-trinh-bat-dong-bo-asynchronou-c-c-sharp-voi-bat-dong-bo-theo-mo-hinh-tac-vu.html#CancellationToken
hi bác, bác đang đi làm với C# hả, mảng nào vậy bác ?
20:40
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?
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);
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 ạ.
1 năm rồi, giải quyết đc chưa bạn, share cho ae với =))
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 ạ.
"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))
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.
2 cai nay khac nhau hoan toan sao ma so sanh duoc ban.
vi du ban so sanh: multi thread va multi process thi ok vi no cung huong den giai quyet cung 1 van de.
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!!!
đâ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);
}
});
@@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ứ