How to add a delay between runs of a Power Automate flow
Posted On August 29, 2021
“When 2 or more instances of the same Power Automate flow are running at the same time, the data manipulation turns into a complete mess, how can I add a delay between the flow runs?”
When you use an automated trigger in a flow, it’ll trigger every time the event happens. In most situations it’s a desired functionality, even if that means running multiple flows at the same time. There’s no need to wait for anything, all flows can run right away.
But in some situations it’s unwanted behaviour. If the flow works with some shared data, or if it uses some external service, parallel runs of multiple instances can lead to a problem. Multiple flows manipulating the same data at the same time can easily turn it into a complete mess. Calling an external service from multiple flows at the same time can lead to requests rejection and flow failures. In such cases it’s better to run only one flow instance at a time.
Run only one flow at a time
Since we’re talking about triggering a flow, the configuration must be done in the trigger. Go to the trigger ‘Settings’ under the 3 dots.
The ‘Concurrency Control’ section allows you to limit the number of flow instances running at the same time. As you want to run only one flow, switch the Limit on and set the parallelism to 1 flow.
With this configuration there’ll be always only 1 flow running. All the other flow runs will wait in the queue until the previous one finishes.
Note: just to make sure: the setting applies only to the specific flow, not all your flows.
Add a delay between the flow runs
All you need to add a delay between the flows is to add the ‘Delay’ action at the end of the flow. The parallelism will allow flows to run one by one, and the ‘Delay’ will delay the end of the flow. Until the current flow ends, until it completes the ‘Delay’, no other flow instance will be started.
Adding a delay between multiple Power Automate flow runs has 2 steps. Firstly, configure the trigger to run only 1 flow at a time. Secondly, add the actual delay as the ‘Delay’ action at the end of the flow. You’ll have always maximum 1 instance of the flow running, the next one triggering earliest after the previous one finishes.
Since you’ll be running flows one by one with a delay, you might see a long queue from time to time. If so, I’d add a trigger condition to run the flow only if necessary and reduce the number of runs.
I use the solution above (without the delay) in a SharePoint based task management process. When a task is closed, I need to check if all the related tasks were also already closed. If it was the last open task, flow will create the subsequent task(s). I can’t risk that users would close the last e.g. 2 tasks at the same time, the flow would trigger twice, it would twice confirm that there’s no other open task, and create twice the subsequent tasks. For that reason there’s always running only one task processing flow, the others waiting for it to finish.