我对c#中的并发性有疑问。我有3个任务A,B,C和我正在使用
等待task.WhenAll(A,B,C)
并行运行它们然后使用它们的结果:
var aresult = A.Result;
var bresult = B.Result;
var cResult = C.Result;
最近我需要添加一个使用cResults的实用程序函数并返回如下值:(此函数不是异步方法)
var sortedResult = SortResult(cResult);
我有这个知识,任务A和B比任务C花费更长的时间,并希望优化过程并让任务(A和B)和(C和sortedResults(cResults))并行运行,以便我使用A和B处理C和sortedResults(cResult)需要更长时间。我怎么能这样做?
很抱歉很长的帖子,我感谢任何帮助。
答案 0 :(得分:1)
await task.WhenAll(A,B,C)
并非并行执行任务。它做了什么需要3 已经执行任务并确保该方法在完成后继续执行。您已经已经开始执行任务,只需创建A
,B
和C
(可能是通过调用某种异步方法)。
因此,如果您想要的语义是启动A B和C,那么在C完成时执行某些操作,然后在A和B完成时执行其他操作,然后只写出每个操作。启动A,B和C就像调用3个异步方法一样简单,在C
完成之后执行操作就像等待C一样简单,在A和B完成后执行操作就像等待A和B一样简单(或者使用Task.WhenAll
并提供这两项任务,它会产生同样的效果。)