【问题标题】:launch async methods when others finished, in undetermined order在其他人完成时以未确定的顺序启动异步方法
【发布时间】:2022-11-26 22:35:52
【问题描述】:

我有很多异步运行的任务

Task<bool> task1 = Task.Run<bool>(() =>
{
    return this.addGroupStringToDictionary("IfcPolyline");
});
Task<bool> task2 = Task.Run<bool>(() =>
{
    return this.addGroupStringToDictionary("IfcPolyLoop");
});
Task<bool> task3 = Task.Run<bool>(() =>
{
    return this.addGroupStringToDictionary("IfcAxis2Placement2D");
});
Task<bool> task4 = Task.Run<bool>(() =>
{
    return this.addGroupStringToDictionary("IfcAxis2Placement3D");
});

现在,我想在其中一些任务完成后立即执行其他任务。

假设我有 3 个任务需要在那之后执行:

  • task5 需要在 Task1 和 Task2 完成时执行。

  • 任务 6 需要在任务 3 和任务 4 完成后执行。

  • Task 1 和Task 6 完成后需要执行Task 7。

我该怎么做,因为如果我在调用 task5 之前使用 await Task.WhenAll(task1,task2),我也会阻止 task6 和 task7 的执行?

【问题讨论】:

    标签: c# asynchronous


    【解决方案1】:

    对于简单的情况,您可以使用 Task.ContinueWith()。见Chaining tasks using continuation tasks on Microsoft Learn

    对于更复杂的情况,如果您有大量数据要处理,您可以使用 DataFlow 库为异步作业创建管道。见How to: Implement a producer-consumer dataflow pattern

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多