6.5 — 3. CancellationToken
Summary
CancellationToken là một tín hiệu hợp tác: nó không giết được thread nào, chỉ báo "bên gọi không cần kết quả nữa" và trông chờ code phía dưới tự nhìn vào rồi dừng. Bên phát tín hiệu là CancellationTokenSource, bên nhận là CancellationToken — tách đôi để hàm nhận token không thể tự huỷ công việc của người khác. Trong ASP.NET Core, tham số CancellationToken của action được bind thẳng vào HttpContext.RequestAborted, nên chỉ cần truyền nó xuống EF Core và HttpClient là request bị client bỏ ngang sẽ kéo theo việc huỷ câu query. Ba lỗi phổ biến nhất: nuốt OperationCanceledException rồi trả về null, truyền token vào cả bước ghi đã đi quá điểm không thể quay lui, và quên Dispose cái CancellationTokenSource có timeout.
Mục tiêu bài học
Sau bài này bạn có thể:
- Giải thích vì sao huỷ trong .NET là hợp tác chứ không phải cưỡng chế, và điều đó ràng buộc gì lên code của bạn.
- Chọn đúng một trong ba cách phản ứng với token: kiểm tra
IsCancellationRequested, ném bằngThrowIfCancellationRequested(), hoặc đăng ký callback. - Nối token của HTTP request với token timeout của riêng bạn bằng
CreateLinkedTokenSource, và biết bên nào đã kích hoạt. - Chỉ ra được ba lỗi khiến việc huỷ thành vô dụng — hoặc tệ hơn, thành nguồn gốc dữ liệu không nhất quán.