gpt4 book ai didi

c# - 谁取消了我的任务?

转载 作者:太空狗 更新时间:2023-10-29 18:18:41 25 4
gpt4 key购买 nike

我的 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);

我希望继续任务在任务出错或被取消时运行,但如果运行正常则不运行。永远不会执行延续。

稍后在我的程序中捕获了一个 AggregateException,它包装了一个 TaskCanceledException。

我与任务的另一个主要交互是调用 WaitAny(taskArray, timeout) 直到我没有更多任务要启动,然后调用 WaitAll 直到最后一个任务完成才超时。

超时的 WaitAny 会导致取消吗?为什么我的延续没有被调用?

这只是我第二次刷任务库,所以我一无所知。

更新:

我发现了这个 SO 问题:How to propagate a Task's Canceled status to a continuation task。我上面的代码中的一个错误(但不是取消的原因)是我假设继续任务状态与原始任务的状态相同。事实上,如另一篇文章所述,您必须做一些工作才能从另一个获得一个。

更新 2:

Brian:感谢您提供文档引用。我曾上下搜索过任务被取消的其他原因,但遗漏了这些词:

"If you are waiting on a Task that transitions to the Canceled state, a Task (wrapped in an AggregateException) is manufactured and thrown. Note that this exception indicates successful cancellation instead of a faulty situation. Therefore, the Task's Exception property returns null."

最佳答案

您正在等待延续,由于原始任务运行完成,延续任务被取消。此行为包含在 the documentation 中.

关于c# - 谁取消了我的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com