試験である:私はCancelAfterに「0」の値を提供する場合このテストはなぜ失敗しますか?次のように
[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);
}
、次にテストケースは成功します。このテストは他の値で失敗し続けるのはなぜですか?
これはトークンがタスクを中止しないキャンセルのVisual Studio Expressの
実行に渡されたトークンはすでにキャンセルされていても親タスクはキャンセルされていても継続が実行されるためです。取り消しは協調的であるため、他の値では失敗します。実行は、タスクを開始する前にトークンのみをチェックし、途中ではチェックしません。 –
トークンをキャンセルしても、タスクは中止されません**。 'Thread.Sleep(200)'行は、これが(例えば10ms後に)中止されることを期待していると思われます。 – Groo