Я пытаюсь узнать, как отменить задачу, используя токен отмены. Здесь я написал для него 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
. поэтому он не должен запускаться, поскольку он отменен. Но работает в полную силу.
Я где-то читал, что:
Если задача не запущена и вы отмените ее, то она не перейдет в состояние выполнения, а перейдет в состояние отмены, когда вы ее вызовете.
Но, похоже, здесь этого не происходит. Кто-нибудь объяснит мне это?