【问题标题】:Run async tasks and one utility function in parallel并行运行异步任务和一个实用程序功能
【发布时间】:2017-05-10 17:35:57
【问题描述】:

我对 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) 所需的相同时间。我该怎么做?

抱歉,帖子太长了,感谢您的帮助。

【问题讨论】:

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


    【解决方案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 提供这两个任务,效果是一样的)。

    【讨论】:

    • 我想要的是任务 A、B 与任务 C 和 sortResult(cResult) 并行运行
    • @pojroj 而我描述的序列将实现这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多