所以我有这段代码:
//CancelationToken
CancellationTokenSource src = new CancellationTokenSource();
CancellationToken ct = src.Token;
ct.Register(() => Console.WriteLine("Abbruch des Tasks"));
//Task
Task t = new Task(() =>
{
System.Threading.Thread.Sleep(1000);
if (ct.IsCancellationRequested)
{
try
{
//Throw
ct.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
Console.WriteLine(
"ThrowIfCancellationRequested() liefert eben eine Exception");
}
}
}, ct);
//Run Task and Cancel
t.Start();
src.CancelAfter(350);
t.Wait();
// Get Information
Console.WriteLine("Canceled: {0} . Finished: {1} . Error: {2}",
t.IsCanceled, t.IsCompleted, t.IsFaulted);
在这种情况下,我取消了我的任务,但最终的输出是:"Canceled: False . Finished: True . Error: False"。
在我看来,它应该是"Canceled:True . Finished:False"。为什么会得到这个结果?因为我试图捕获异常吗?
我尝试过不使用try-catch块,但由于OperationCanceledException,我的程序停止了。有人可以帮我吗?
t.Wait();
周围即可。 - Frank J