cancellationTokenSource.Cancel
キャンセル トークンに関連付けられたタスク内で呼び出すと、OperationCancelledException
が正しくスローされますが、予期されるように、task.IsCanceled
常に更新されて に設定されるとは限りませんtrue
。
この問題は、次の nUnit テストですぐに実証できます。
var cancellationTokenSource = new CancellationTokenSource();
Task task = Task.Factory.StartNew(() =>
{
cancellationTokenSource.Cancel();
cancellationTokenSource.Token.ThrowIfCancellationRequested();
},
cancellationTokenSource.Token);
try
{
task.Wait(cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
}
if (task.IsCanceled)
{
Assert.Pass();
}
else
{
Assert.Fail();
}
このテストを実行すると、テストは成功しますが、(Resharper テスト ランナーを使用して) このテストを DEBUG すると、テストは失敗します。
これは Resharper とは何の関係もないと思います。Resharper は、おそらく .Net の問題を明らかにするいくつかの条件を作成している可能性があると思います。または、私は完全に間違ったことをしているだけかもしれません...何か洞察はありますか?