我的C#任务就是让取消,但不是我。 我没有得到一个堆栈跟踪和发生问题我想不通。
我的任务调用看起来是这样的:
var t = Task<Boolean>.Factory.StartNew(() =>
{
Boolean bOk = DoSomthingImportant();
return bOk;
}, TaskCreationOptions.AttachedToParent)
.ContinueWith<Boolean>((theTask) =>
{
var reason = theTask.IsCanceled ? "it was canceled" : "it faulted";
Debug.WriteLine("Error: Task ended because " + reason + ".");
... log the exception to one of my objects...
return false;
}, TaskContinuationOptions.NotOnRanToCompletion);
我想如果任务发生故障或者被取消,但如果它跑了好延续任务运行。 永远不会执行的延续。
后来我的程序捕捉这一个包裹的TaskCanceledException AggregateException。
我的任务,我的其他主要作用是调用了WaitAny(taskArray,超时),直到我有没有更多的任务开始,然后WaitAll调用,没有超时,直到最后的任务就完成了。
可以用一个超时了WaitAny会取消? 为什么没有我的延续被调用?
这只是我第二次刷任务库,让我无言以对。
更新:
我发现这太问题:如何将一个任务的取消状态传播到后续任务。 在我上面的代码(但不是对消的原因)的一个错误是,我假定延续任务的状态是一样的原始任务的状态。 事实上,你必须做一些工作,以获得从其他的人,因为其他职位描述。
更新2:
布莱恩:谢谢你的文件建立参考。 我已经搜查高和低任务的备用原因被取消,但错过了这些话:
“如果你对过渡到取消状态的任务等待着,一个任务(包装在一个AggregateException)制造和抛出。请注意,此异常指示成功消除,而不是一个错误的情况。因此,任务的Exception属性返回null。 “