Tôi đang tìm kiếm một lý do tại sao .NET CancellationToken
struct được giới thiệu ngoài CancellationTokenSource
lớp. Tôi hiểu cách sử dụng API, nhưng cũng muốn hiểu tại sao nó được thiết kế theo cách đó.
Tức là tại sao chúng ta có:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
thay vì trực tiếp đi qua CancellationTokenSource
như:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
Đây có phải là một tối ưu hóa hiệu suất dựa trên thực tế là việc kiểm tra trạng thái hủy xảy ra thường xuyên hơn so với việc chuyển mã thông báo xung quanh?
Vì vậy, CancellationTokenSource
có thể theo dõi và cập nhật CancellationTokens
, và đối với mỗi mã thông báo, kiểm tra hủy là truy cập trường địa phương?
Cho rằng một bool dễ bay hơi không có khóa là đủ trong cả hai trường hợp, tôi vẫn không thể hiểu tại sao điều đó sẽ nhanh hơn.
Cảm ơn!