我正在使用任务并行库,并且正在使用任务工厂来创建和启动新任务列表。启动任务后,我调用 Task.WaitAll(...) 等待所有任务返回。代码类似于以下内容。
Tasks<MyClass>[] tasks = .../Create List of Tasks and Start using TaskFactory.StartNew(..) etc.
Task.WaitAll(tasks); //Wait until all tasks complete before continuing.
当我的任务返回并完成时,如果它们符合某些条件,结果将汇总到一个列表中,以便稍后处理。在每个任务运行时,可能会引发某些异常,这将“取消”将任务结果添加到聚合列表的资格。我希望能够在执行任务中抛出异常,并且该任务不再运行。
我知道有诸如取消令牌和取消源等功能可以处理某些事件,但它们似乎不允许我做我想做的事。尽管它不存在,但我会喜欢诸如在 task.OnException 或 task.OnError 等任务上订阅事件处理程序的功能。使用 TPL 完成此功能有哪些选择?