×

Xử Lý Bất Đồng Bộ Trong C# Với Async/Await

C# cung cấp các từ khóa asyncawait để làm việc với các thao tác bất đồng bộ một cách dễ dàng và hiệu quả. Các từ khóa này giúp bạn viết mã bất đồng bộ trông giống mã đồng bộ, giúp dễ đọc và bảo trì hơn. Dưới đây là hướng dẫn cách sử dụng asyncawait để xử lý bất đồng bộ trong C#.

1. Từ Khóa async

  • async được sử dụng để khai báo rằng một phương thức, lambda, hoặc biểu thức ẩn danh là bất đồng bộ.
  • Phương thức có từ khóa async thường trả về Task hoặc Task<T> (hoặc void đối với các sự kiện).

2. Từ Khóa await

  • await được sử dụng để chờ đợi một tác vụ bất đồng bộ hoàn thành.
  • await có thể chỉ được sử dụng trong một phương thức, lambda, hoặc biểu thức ẩn danh đã được đánh dấu bằng từ khóa async.

Ví Dụ: Đọc Nội Dung từ Một URL

Bước 1: Thêm Tham Chiếu Đến System.Net.Http

Đầu tiên, bạn cần thêm tham chiếu đến thư viện System.Net.Http nếu chưa có trong dự án của bạn.

Bước 2: Tạo Phương Thức Bất Đồng Bộ

Dưới đây là ví dụ về cách sử dụng asyncawait để thực hiện một yêu cầu HTTP bất đồng bộ và đọc nội dung từ một URL.

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        string url = "https://www.example.com";
        string content = await FetchContentAsync(url);
        Console.WriteLine(content);
    }

    public static async Task<string> FetchContentAsync(string url)
    {
        using (HttpClient client = new HttpClient())
        {
            // 'await' sẽ tạm dừng phương thức FetchContentAsync cho đến khi tác vụ hoàn thành.
            HttpResponseMessage response = await client.GetAsync(url);
            
            // Đảm bảo rằng yêu cầu đã thành công.
            response.EnsureSuccessStatusCode();

            // 'await' sẽ tạm dừng phương thức FetchContentAsync cho đến khi tác vụ đọc nội dung hoàn thành.
            string responseBody = await response.Content.ReadAsStringAsync();
            
            return responseBody;
        }
    }
}

Giải Thích

  • Phương Thức Bất Đồng Bộ: Phương thức FetchContentAsync được khai báo với từ khóa async và trả về một Task<string>. Bên trong phương thức này, await được sử dụng để chờ đợi các tác vụ bất đồng bộ GetAsyncReadAsStringAsync hoàn thành.
  • Sử Dụng await: Khi await được sử dụng, phương thức sẽ tạm dừng tại đó cho đến khi tác vụ hoàn thành, sau đó tiếp tục thực hiện với kết quả của tác vụ.

Lợi Ích của Bất Đồng Bộ

  1. Hiệu Năng: Phương thức bất đồng bộ giúp tránh chặn luồng chính, cho phép ứng dụng của bạn xử lý nhiều tác vụ đồng thời mà không bị treo.
  2. Khả Năng Mở Rộng: Các thao tác IO-bound, như truy vấn cơ sở dữ liệu hoặc thực hiện yêu cầu HTTP, có thể tận dụng bất đồng bộ để cải thiện khả năng mở rộng và đáp ứng của ứng dụng.

Tổng Kết

  • async: Được sử dụng để khai báo một phương thức bất đồng bộ.
  • await: Được sử dụng để tạm dừng thực thi phương thức bất đồng bộ cho đến khi tác vụ hoàn thành.
  • Ứng dụng thực tiễn: Giúp xử lý các thao tác IO-bound một cách hiệu quả hơn, cải thiện hiệu năng và khả năng mở rộng của ứng dụng.

Sử dụng asyncawait đúng cách sẽ giúp bạn viết mã bất đồng bộ một cách dễ dàng, nâng cao hiệu suất và trải nghiệm người dùng của ứng dụng.

Comments