并行运行异步任务和一个实用程序功能

时间:2017-05-10 17:35:57

标签: c# asynchronous concurrency task-parallel-library

我对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)需要更长时间。我怎么能这样做?

很抱歉很长的帖子,我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

await task.WhenAll(A,B,C) 并非并行执行任务。它做了什么需要3 已经执行任务并确保该方法在完成后继续执行。您已经已经开始执行任务,只需创建ABC(可能是通过调用某种异步方法)。

因此,如果您想要的语义是启动A B和C,那么在C完成时执行某些操作,然后在A和B完成时执行其他操作,然后只写出每个操作。启动A,B和C就像调用3个异步方法一样简单,在C完成之后执行操作就像等待C一样简单,在A和B完成后执行操作就像等待A和B一样简单(或者使用Task.WhenAll并提供这两项任务,它会产生同样的效果。)