У меня есть метод, который принимает CancellationToken
, который позволяет пользователю метода отменить то, что он делает. В рамках метода я использовал этот CancellationToken
вместе с CancellationTokenSource
, чтобы создать связанный CancellationTokenSource
.Остановка аннулированияTokenSource, который истекает после заданного TimeSpan, чтобы сохранить его состояние?
var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(msTimeout));
var timeoutAndCancelTokenSource = CancellationTokenSource.CreateLinkedTokenSource(
timeoutTokenSource.Token, cancelWaitToken);
я тогда начать while
цикл, который постоянно проверяет, чтобы увидеть, если некоторое значение достигло цели, в противном случае я await
Task.Delay
. Цикл имеет два условия выхода, если целевое значение достигнуто или если значение timeoutAndCancelTokenSource.IsCancellationRequested
истинно.
Когда петля выходит, я могу допросить timeoutTokenSource
и cancelWaitToken
, чтобы определить, был ли цикл отменен в результате таймаута, он был отменен или достигнут целевое значение.
Проблема, которую я вижу, заключается в том, что когда петля выходит, timeoutTokenSource
все еще отсчитывает. Поэтому, если на тайм-ауте осталось всего несколько миллисекунд, я мог бы сделать ложные предположения о том, что произошло в цикле.
Есть ли способ остановить CancellationTokenSource
так, чтобы он не перегревался?
За исключением установки тайм-аута, является ли какой-либо другой метод передан 'CancellationTokenSource' для ручной отмены токена? –