Как запустить код при отмене CancellationToken?

Учитывая CancellationToken, я хочу вызвать метод «отмена» для объекта, представляющего асинхронную операцию, когда CancellationToken отменяется. Это возможно?

Фон: я взаимодействую с API, который представляет асинхронную операцию следующим образом (более или менее):

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
}

Я могу достаточно легко обернуть это в метод Task DoAsyncOp(), но я хочу поддерживать отмену, например Task DoAsyncOp(CancellationToken cancellationToken). В моем случае, когда CancellationToken отменяется, вызовите Cancel для объекта AsyncOp.


person mackenir    schedule 07.05.2014    source источник


Ответы (1)


Вы можете зарегистрировать Action, который будет вызываться при отмене токена:

token.Register(() => { /*...*/ });
person Christoph Fink    schedule 07.05.2014
comment
Блестящий. Не могу поверить, что не заметил этот метод в CancellationToken. - person mackenir; 07.05.2014
comment
Я несколько недель работал со своим токеном, пока не нашел его ;-). Если вы ищете только событие, вы не видите метод Register... - person Christoph Fink; 07.05.2014