TaskIsCanceled为false,我取消当我取消任务时,IsCanceled属性的等待结果仍然返回true。好像出了什么问题。请指教。这是代码:CancellationTokenSource_cancelLationToken=newCancellationTokenSource();privateasyncvoidButton_Click(objectsender,EventArgse){_cancelLationToken=newCancellationTokenSource();_cancelLationToken.Token.Register(theCallBack);varmyTaskToWaitFor=Task.Factory.StartNew(()=>WorkHard(_cancelLationToken.Token),_cancelLationToken.Token);等待我的任务等待;诠释我=0;如果(myTaskToWaitFor.IsCanceled)我=我;//调试断点elsei=i;//调试断点<==总是在这里结束...:-(}privatevoidWorkHard(CancellationTokentoken){for(inti=0;i<100000000;i++)if(token.IsCancellationRequested)break;elseMath.Acos(Math.Pow(i,i/10000000));}publicvoidtheCallBack(){//todo:dosomething}privatevoidCancelButton_Click(objectsender,EventArgse){_cancelLationToken.Cancel();}当我点击取消按钮并因此触发CancelButton_Click方法时,会触发CallBack方法。但是...当我检查myTaskToWaitFor.IsCanceled时总是返回false,我得到这个:Id=1,Status=RanToCompletion,Method="{null}"。为什么状态没有被取消或什么的?当我像这样使用http://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken.throwifcancellationrequested.aspx时:privatevoidWorkHard(CancellationTokentoken){for(inti=0;i<100000000;i++)if(token.IsCancellationRequested)token.ThrowIfCancellationRequested();否则Math.Acos(Math.Pow(i,i/10000000));我只在调试模式下得到一些错误,似乎myTaskToWaitFor实际上被取消了,但是代码没有继续(由于异常关闭了继续程序)。有任何想法吗?亲切的问候,Matthijs编辑:使用TrowIfCancellationRequested进行测试基于“当您在将被取消的CancellationToken上调用ThrowIfCancellationRequested时,它会抛出OperationCanceledException。TaskParallel库知道这种类型的异常代表取消而不是失败,并且将以不同的方式对待它。例如,Task有一个名为IsCanceled的属性,当在执行异步方法时抛出OperationCanceledException时,该属性会自动变为true。来自AlexDavies的AsyncinC#5.0一书。这就是为什么我认为我可以期望myTaskToWaitFor.IsCancelled返回true并且代码将继续。ThrowIfCancellationRequested()是一种理想的方式来表示由于观察取消而存在。这将在调用者处表现为一个异常,但您可以通过在等待周围放置一个try/catch来处理它,并简单地检查它的原因-无论是在任务上还是通过检查AggregateException。以上是C#学习教程:任务IsCanceled是假的,我已经取消了所有分享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
