首页 > 解决方案 > 循环遍历 TPL 数据流块的正确方法是什么?

问题描述

我在某处读到 TPL Dataflow 块可以循环,但我还没有看到一个明确的例子来说明如何做到这一点。我的想法如下,但我不确定我是否违反了一些规则,或者是否有更好的方法?

1)我将使用“作业”对象填充并发作业队列(对象将具有命令列表,循环值)

2)队列将作业发送到转换块,该块将查看第一个命令应该是什么,并使用广播块向所有其他转换块发送消息

3)如果链接到广播块的转换块看到消息是针对它的,它将对作业对象进行转换。完成后,它将链接到第二个广播块。

4) 第二个广播块将发送一条消息,该消息将被其他块用于更新 GUI,并更新日志文件

5)第二个广播块也将向转换块发送消息,其唯一目的是检查作业对象以查看其列表中是否还有任何命令。如果是这样,这个块将把作业对象重新添加到主作业队列中,但不会在它用下一个命令替换它刚刚完成的命令之前。作业对象还可以具有循环计数器属性,该属性在作业重新添加到队列之前会递减。

换句话说,我想在现实生活中做什么:我有一个 XML 文件(作业对象),其中包含测试参数,包括要运行哪些测试以及应该重复多少次测试(如果有的话)。测试站可以在 1 到 16 个独立单元上运行测试,每个单元运行自己独特的测试。我选择 TPL 数据流方法是因为这些测试都需要能够在单独的线程上同时运行,并且单元可以由异步人员交换进出。动作/命令相当简单;一个是运行一堆测量,另一个动作是将测试单元加热到特定温度'x'分钟,一个断电命令(仅针对特定单元,而不是所有单元),等等上。加热任务只是一个命令,然后是漫长的等待,它什么也不做。

** 示例工作(在不同的日子开始)**

单元 7:测量,加热 30 分钟,测量,断电

单元 10:测量,加热 500 分钟,重复这两个命令 10 次,断电(循环结束)

单元 3:测量,断电

单元5:每30分钟测量1天,加热7天,测量,掉电。

标签: c#loopstask-parallel-libraryjob-schedulingtpl-dataflow

解决方案


推荐阅读