【问题标题】:Accessing results of nested tasks from the parent task从父任务访问嵌套任务的结果
【发布时间】:2012-05-21 20:04:53
【问题描述】:

我目前正在探索 TPL,我想知道以下情况是否可能:

我想创建一个嵌套结构,其中包含一个父任务和多个“子”任务。

结构类似这样:

Parent Task
    |
    |-- Child Task A
    |-- Child Task B 
    |-- ...

我希望父任务等待所有子任务完成,并访问它们的结果(以确定自身的结果)。

我找不到任何关于嵌套任务和从父级访问其结果的有价值信息。

【问题讨论】:

    标签: c# .net task-parallel-library task


    【解决方案1】:

    一种方法是在父任务中使用静态方法Task.WaitAll 等待所有子任务完成,然后检查它们各自的Status- 和Result-properties。

    如果在所有子任务完成之前父任务根本没有工作,您可以重组它并在所有子任务完成后使用TaskFactory.ContinueWhenAll 启动新任务。然后可以访问各个结果。

    【讨论】:

    • 即使在父任务中还有一些工作,你仍然可以使用ContinueWhenAll()
    • Task.WaitAll 在这种情况下等同于 Parallel.Invoke。两者都通过阻塞来浪费父任务的线程。最好使用 ContinueWhenAll 以避免不必要的阻塞。
    • 我想(以某种方式)构造一个树状的 Task 对象,它可以简单地 Start() 并完成它的工作。这听起来像我需要以不同的方式做......
    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2019-10-07
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多