c# - 循环内嵌套任务

标签 c# task

我正在尝试在循环内实现嵌套任务 - 这是我迄今为止所拥有的模式,但是我还不确定,因为这是我第一次使用并行任务库。

父(层)任务应等待子(节点)任务完成。

    public int NestedTask(IEnumerable<MatchTier> tierNodes)
    {
        var tier = Task<int>.Factory.StartNew(() =>
        {
            Task<int> node = null;

            foreach(var n in tierNodes)
            {
                node = Task<int>.Factory.StartNew(() =>
                {
                    // Task logic goes here

                    return 1; // temp placeholder
                });

                // if a valid value is returned then exit this loop
            }

            return node.Result;

        });

        return tier.Result;
    }

子节点循环直到返回第一个有效值,然后应退出循环,并将有效值传递给父节点。

子节点和父节点也都需要超时。每个子进程将被允许运行大约 3 秒,之后进程将超时并询问下一个节点。

父级的总体超时值约为 15 - 20 秒,在此之后,如果没有收到有效响应,它也应该终止。

这看起来符合逻辑吗?

最佳答案

等待任务完成

node.Wait();

等待任务直到一些蜱虫完成

node.Wait(timeToWait);

或者等待它们全部完成

Task.WaitAll(tasks);

你应该阅读here了解更多信息

关于c# - 循环内嵌套任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18460464/

相关文章:

c# - 使用 LINQ 分隔列表元素并将结果插入回列表

task - 任务中的意外输出?

groovy - 我可以从 .gradle 文件中的 groovy 方法调用 gradle 任务吗?

c# - 值总是一样的

c++ - OpenMP 任务和数据环境

c#拒绝访问以创建新文件

c# - 需要确保 C# HDF5 输出(属性)与 Visual C++ 相同。或者 C# 中与 C++ 等效的 HDF5 格式是什么

c# - 检查变量何时等于另一个值的更好方法

c# - Protobuf-net 尝试 JIT 编译方法 '(wrapper dynamic-method) ClassExtensions.StringArray

c# - 如何循环创建任务并等待所有任务完成