!cancellationPoll.WaitHandle.WaitOne(tsInterval)
необходим, чтобы вы не ждали все время. WaitOne(tsInterval)
вернется либо потому, что токен получил синнал для отмены, либо потому, что время истекло. Если токен получил сигнал для отмены WaitOne(tsInterval)
, он вернет true
и завершит цикл.
Например, если вы сделаете что-то вроде:
while(true)
{
// long operation
if (cancellationPoll.IsCancellationRequested)
{
break;
}
Thread.Sleep(tsInterval);
}
если затем отменяется запрос, в то время как поток блокируется с помощью Thread.Sleep()
, вся операция не будет знать, что запрос отменяется не раньше, чем завершится Thread.Sleep()
и следующий цикл не достигнет оператора if
.