
Sử dụng async/await trong C#
February 17, 2025Lập trình bất đồng bộ có thể nghe có vẻ phức tạp, nhưng thực chất nó là một cách giúp thực thi các tác vụ dài mà không làm “đóng băng” toàn bộ chương trình. Những tác vụ này thường được gọi là các thao tác chạy lâu, như truy cập cơ sở dữ liệu, tải tệp lớn hoặc gọi API. Vậy điều này mang lại lợi ích gì?
Hãy tưởng tượng bạn đang nấu một bữa ăn lớn: trong khi một món ăn đang nướng trong lò, bạn có thể tranh thủ cắt rau hoặc chuẩn bị một công thức khác. Trong lập trình, điều này tương đương với việc chạy các phần khác của chương trình trong khi một tác vụ dài đang được thực hiện ở chế độ nền.
Trước khi có async/await, việc chạy một tác vụ dài mà không làm treo chương trình yêu cầu những kỹ thuật phức tạp. Ví dụ:
public void ProcessData()
{
Task.Run(() =>
{
var data = FetchLongData();
UpdateScreen(data);
});
}
}
Sau khi có async/await, đoạn mã trở nên rõ ràng và dễ hiểu hơn nhiều:
public async Task ProcessDataAsync()
{
var data = await FetchLongDataAsync();
UpdateScreen(data);
}
Trong ví dụ thứ hai, từ khóa await cho phép chương trình “chờ” kết quả từ FetchLongDataAsync mà không thực sự dừng toàn bộ luồng thực thi. Mã tiếp tục chạy, trong khi tác vụ dài diễn ra song song. Khi phản hồi từ FetchLongDataAsync sẵn sàng, chương trình sẽ tiếp tục và cập nhật giao diện. Điều này giúp ứng dụng linh hoạt và phản hồi nhanh hơn, đặc biệt khi nhiều tác vụ cần được xử lý đồng thời.
Bên cạnh việc xử lý một tác vụ dài trong khi chương trình tiếp tục hoạt động, async/await còn cho phép thực thi song song nhiều tác vụ. Chẳng hạn, nếu chương trình cần thực hiện hai truy vấn trên internet và sau đó kết hợp kết quả, cả hai truy vấn có thể chạy đồng thời thay vì tuần tự.
Lợi ích chính của async/await bao gồm:
- Tăng tốc độ ứng dụng: Chương trình không bị “mắc kẹt” trong một tác vụ chạy lâu.
- Mã nguồn sạch và dễ hiểu hơn: async/await giúp mã dễ đọc, bảo trì hơn so với các kỹ thuật phức tạp trước đây để chạy tác vụ dài mà không làm gián đoạn chương trình.
- Thực thi song song: Có thể chạy nhiều thao tác cùng lúc, tối ưu hóa thời gian và tài nguyên.
Để sử dụng async/await trong C#, bạn cần:
- Thêm từ khóa async vào đầu phương thức (async Task).
- Sử dụng await trước các tác vụ chạy lâu, ví dụ: await FetchLongDataAsync();.
Bạn đã sử dụng async/await trong code c# chưa? Nó đã giúp tối ưu hóa mã nguồn của bạn như thế nào?
