Huỷ một danh sách Task
Bạn có thể hủy một console application nếu bạn không muốn chờ nó hoàn thành xong. Bằng việc theo dõi những ví dụ dưới đây trong chủ đề này, bạn có thể thêm một sự hủy đến ứng dụng mà tải nội dụng của các danh sách của website. Bạn có thể hủy nhiều task bằng cách liên kêt thực thể CancellationTokenSource ở mỗi task. Nếu bạn nhấn phím Enter, bạn sẽ hủy tất cả các task chưa hoàn thành
Bài viết này sẽ đi qua các phần:
- Tạo một console application .NET
- Viết một ứng dụng bất đồng bộ hỗ trợ việc hủy
- Mô phỏng việc hủy bỏ hiệu quả.
Điều kiện tiên quyết
- .NET 5.0 hoặc những SDK mới hơn
- Tính hợp với môi trường phát triển (IDE)
Tạo một ứng dụng ví dụ
Tạo một ứng dụng console .NET Core mới. Bạn có thể tạo bằng việc sử dụng câu lệnh dotnet new console hoặc từ Visual Studio. Mở file Program.cs trong công cụ viết code yêu thích của bạn.
Thay thế câu lệnh using
Thay thế những câu lệnh using bằng những câu khai báo dưới đây:
Thêm các trường (field)
Trong lớp Program
, thêm ba trường dưới đây vô:
CancellationTokenSource được sử dụng để ra dấu hiệu một request bị hủy bỏ đến CancellationToken. HttpClient
để lộ ra khả năng gửi HTTP request và nhận HTTP respóne. s_urlList
giữ tất cả URL mà ứng dụng lên kế hoạch để xử lý.
Cập nhật entry point của ứng dụng
Entry point chính trong ứng dụng console là phương thức Main
. Thay thế phương thức hiện tại bằng đoạn code dưới đây:
Phương thức Main
được cập nhật là một phương thức chính chạy bất đồng bộ (Async main), mà nó cho phép một entry point bất đồng bộ có thể thực thi. Nó viết một vài hướng thông báo hướng dẫn ở console, sau đó khai báo một thực thể Task đặt tên là cancelTask
, để đọc console khi gõ phím. Nếu gõ phím Enter, thì sẽ gọi tới CancellationTokenSoủce.Cancel(). Điều này sẽ báo hiệu cho việc hủy bỏ. Kế đó, biến sumPageSizesTask
được gán từ phương thức SumPageSizesAsync
. Cả hai task dược truyền vô Task.WhenAny(Task[]) nghĩa là nó sẽ tiếp tục nếu có bất kỳ một trong hai task hoàn thành.
Tạo một phương thức tính tổng kích thước trang bất đồng bộ.
Dưới đây là phương thức Main
, bổ sung phương thức SumPageSizesAsync
:
Phương thức bắt đầu bằng việc khởi tạo và bắt đầu một Stopwatch. Sau đó nó lặp mỗi URL trong s_urlList và gọi ProcessUrlAsync. Với mỗi lần lặp, s_cts.Token được truyền vào phương thức ProcessUrlAsync và code trả về một Task<TResult>, lúc đó TResult là một số nguyên:
Thêm phương thức xử lý
Thêm phương thức ProcessUrlAsync
dưới đây ở dưới phương thức SumPageSizesAsync
:
Với mỗi URL được truyền vào, phương thức sẽ sử dụng thực thể client
được cung cấp để lấy response kiểu byte[]
. Thực thể CancellationToken được truyền vào phương thức HttpClient.GetAsync(String, CancellationToken) và phương thức HttpContent.ReadAsByteArrayAsync(). token
được sử dụng để đăng ký cho một việc huỷ request. Độ dài được trả về sau khi URL và độ dài được ghi trong console
Ví dụ output của ứng dụng
Ví dụ hoàn chỉnh
Đoạn code dưới đây là toàn bộ chương trình hoàn chỉnh trong file Program.cs
Nguồn: Cancel a list of tasks (C#)
Nhận xét
Đăng nhận xét