我正在尝试学习如何使用取消令牌取消任务。在这里,我为它编写了一个 UnitTest,但我没有得到它的工作方式。
[TestMethod]
public async Task Task_should_not_run_when_token_cancelled_before_its_call()
{
var cts = new CancellationTokenSource();
var token = cts.Token;
cts.Cancel();
Debug.WriteLine("Calling Cancellable Method".ToUpper());
try
{
await CheckMeCalled(token);
}
catch (Exception expException)
{
}
}
private async Task CheckMeCalled(CancellationToken ct)
{
Debug.WriteLine("Before task delayed".ToUpper());
await Task.Delay(5000);
Debug.WriteLine("After task delayed".ToUpper());
}
在上面的测试中,我在调用方法cts.Cancel()
之前调用了CheckMeCalled
。所以它不应该在取消时运行。但它正在全力以赴。
我在某处读过:
如果 Task 没有运行并且你取消它,那么它不会进入运行状态,而是在你调用它时进入取消状态。
但这似乎并没有在这里发生。有人能给我解释一下吗?