测试如下:
[TestMethod()]
public void IncrementTestNegative() {
CancellationTokenSource s = new CancellationTokenSource();
s.CancelAfter(10);
ManualResetEventSlim evt = new ManualResetEventSlim();
bool breached = false;
Task.Run(() => {
Thread.Sleep(200);
breached = true;
}, s.Token).ContinueWith((t) => {
evt.Set();
});
evt.Wait();
Assert.IsFalse(breached);
}
如果我向CancelAfter提供值“0”,则测试用例成功。为什么这个测试会与其他值一起失败。
这是在Visual Studio Express中使用MS Test框架
答案 0 :(得分:2)
取消令牌不会中止该任务。它只设置您必须在任务内部检查的标志(CancellationToken.IsCancellationRequested)。但是,如果在Task
偶数开始之前取消令牌,则Task
将不会运行并将跳转到续行。
在测试之后,您希望breached
为false
意味着您希望在CancelAfter
指定的时间段之后中止任务。
换句话说,你的Thread.Sleep(200)
没有目的,虽然令牌可能在任务开始后约10ms被取消(你不应该期望非常精确)定时)。