无并发控制
下面的示例规则集包括两个循环。 每个循环使用将文本写入文件操作将多行文本写入文本文件,在每行文字之间有小幅延迟。
如果一个实例正在运行,输出看起来像这样:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Starting Loop 1 *****************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 *******************************
- Starting Loop 1 *****************************
-
- Start of Loop 2 ###############################
Loop 2 - iteration: 1
Loop 2 - iteration: 2
Loop 2 - iteration: 3 - End of Loop 2 #################################
但如果多个实例在快速连续运行,输出看起来会类似这样:-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1 - Starting Loop 1 *************************
Loop 1 - Iteration: 1 - Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 2
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3
Loop 1 - Iteration: 3
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- End of Loop 1 ***************************
- End of Loop 1 ***************************
- Starting Loop 1 *************************
-
- Start of Loop 2 ###########################
Loop 2 - iteration: 1 - Start of Loop 2 ###########################
Loop 2 - iteration: 1 - Start of Loop 2 ###########################
Loop 2 - iteration: 1
Loop 2 - iteration: 2
Loop 2 - iteration: 2
Loop 2 - iteration: 2
Loop 2 - iteration: 3
Loop 2 - iteration: 3
Loop 2 - iteration: 3 - End of Loop 2 #############################
- End of Loop 2 #############################
- End of Loop 2 #############################
因为每个实例都同时写入文件,而实例的输出是交错的。
仅限制并发
在下面的例子中,仅使用了限制并发操作。 它被配置为仅允许一个实例运行。 限制名为 LimitConcurrencyOnlyExample。
从执行限制并发操作的时间起,直到规则链完成间,不会运行规则链的其他实例。 这些实例将在限制并发操作处排队,直到当前正在执行的实例完成。 如果有多个规则链实例在限制并发操作处排队,它们将以与排队相同的顺序被释放:
如果上述规则集在作业中启用,并快速连续触发三次,将生成一个文本文件,其中包含以下输出:-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
-
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
- Start Loop 2 ##############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ##############################
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
注意,一次只允许规则链的一个实例写入文件中。 每个实例都要完成两个循环,然后才允许下一个实例继续执行。 这是因为当每个实例都在限制并发操作处获得限制时,它将保持限制直到完成两个循环。 在第二次循环结束时,限制将自动释放,因为这是规则链的结尾。 然后在限制并发操作处等待的下一个实例将能够获得限制并继续。
限制并发和释放并发
以下示例中,同时使用了限制并发操作和释放并发操作。 限制并发和释放并发操作对界定的规则链区域将限制为单实例运行。 任何其他实例将在限制并发操作处排队,直到当前正在执行的实例到达释放并发操作。 然后下一个等待实例将开始执行限制并发到释放并发区域内的操作。
如果上述规则集在作业中启用,并快速连续触发三次,将生成一个文本文件,其中包含以下输出:-
-
-
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
Loop 1 - Iteration: 1
Loop 1 - Iteration: 2
Loop 1 - Iteration: 3 - End of Loop 1 ***************************
- Starting Loop 1 *************************
-
-
-
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
- Start Loop 2 ##############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ##############################
- Start Loop 2 ##############################
- Start Loop 2 ###############################
Loop 2 - repetition: 1
Loop 2 - repetition: 2
Loop 2 - repetition: 3 - End of Loop 2 ###############################
注意,和上一个示例中医院,循环中的输出不会交错,因为它在第一个示例中。 但它与上一个示例的区别在于,每个实例都被允许完成第一个循环,然后允许第一个实例继续执行第二个循环。 这是因为这两个循环之间实例被释放并重新获得限制,使得它有效地到达队列的末尾,然后必须等待再次获得限制。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-