我有一个方法接受CancellationToken
,它允许方法的用户取消它正在做的事情。在此方法中,我使用此CancellationToken
以及CancellationTokenSource
来创建链接CancellationTokenSource
。停止CancellationTokenSource在给定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'来手动取消令牌? –