相关疑难解决方法(0)

如何使用CancellationToken取消任务?

所以我有这个代码:

//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);
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下我取消了我的任务,但我的输出最后是:"取消:假.完成:真.错误:错误"

在我看来,它应该是"取消:真实.完成:假".为什么我得到这个结果?因为我试图抓住异常?

我试过没有try-catch块,但是由于OperationCanceledException,我的程序停止了.有人能帮助我吗?

c# task task-parallel-library cancellationtokensource

6
推荐指数
1
解决办法
3314
查看次数