我有一个场景,其中我有多个函数要并行调用,并且我正在使用 TPL 来完成该任务。我用过
ConcurrentDictionary<string, List<result>> dictionary = new ConcurrentDictionary<string, List<result>>();
var tasks = Task.Run(()=>
{
new Task(()=> {dictionary.TryAdd("First", CallFirstFunction());});
new Task(()=> {dictionary.TryAdd("Second", CallSecondFunction());});
new Task(()=> {dictionary.TryAdd("Third", CallThirdFunction());});
new Task(()=> {dictionary.TryAdd("Fourth", CallFourthFunction());});
});
现在,我需要等到所有函数都执行完毕并在并发字典中返回一些结果,以便我可以将其用于进一步处理,但是如果某些返回的结果为空,无论任务顺序如何,我也想取消任何任务。如果任何函数返回空结果,我需要同时取消所有剩余的任务。我也检查了“CancellationToken”类,但我很困惑在任务中使用它以及如何在任务中共享函数状态。
任何帮助将不胜感激。此致