2014-05-07 18 views
6

Với một CancellationToken, tôi muốn gọi một phương pháp 'hủy' trên một đối tượng đại diện cho một hoạt động không đồng bộ khi CancellationToken bị hủy bỏ. Điều này có thể không?Làm cách nào để chạy mã khi hủy bỏ Hủy đăng ký?

Bối cảnh: Tôi đang giao tiếp với một API mà đại diện cho một op async theo cách sau (nhiều hơn hoặc ít hơn):

class AsyncOp 
{ 
    void Start(Action callback);//returns 'immediately', while beginning an async op. Callback is called when the operation completes. 
    void Cancel();//aborts async operation and calls callback 
} 

tôi có thể quấn này trong một phương pháp dễ dàng Task DoAsyncOp() đủ, nhưng tôi muốn hỗ trợ hủy bỏ, ví dụ: Task DoAsyncOp(CancellationToken cancellationToken). Trong trường hợp của tôi, khi CancellationToken bị hủy, hãy gọi Hủy trên đối tượng AsyncOp.

Trả lời

10

Bạn có thể đăng ký một Action được gọi khi thẻ bị hủy:

token.Register(() => { /*...*/ }); 
+1

Brilliant. Không thể tin rằng tôi đã không nhận thấy phương thức đó trên CancellationToken. – mackenir

+2

Tôi đã làm việc vài tuần với mã thông báo của mình cho đến khi tôi tìm thấy nó ;-). Nếu bạn chỉ tìm kiếm một sự kiện bạn không thấy phương thức 'Register' ... – ChrFin

Các vấn đề liên quan