キャンセルトークンを使用してタスクをキャンセルする方法を学ぼうとしています。ここでは、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
。そのため、キャンセルされたときに実行されるべきではありません。しかし、それは完全に実行されています。
私はどこかでそれを読んだ:
タスクが実行されていないときにキャンセルすると、実行中の状態にはならず、呼び出したときにキャンセルされた状態になります。
しかし、ここで起こっているようには見えません。誰か説明してくれませんか?