Durable Functions orchestration patterns in Azure - Time & Space Complexity
When using Durable Functions orchestration patterns, it's important to understand how the number of function calls grows as you add more tasks.
We want to know how the orchestration's execution time changes when the number of activities increases.
Analyze the time complexity of this orchestration pattern that calls multiple activities in sequence.
[FunctionName("Orchestrator")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
var results = new List<string>();
var tasks = context.GetInput<List<string>>();
foreach (var taskName in tasks)
{
var result = await context.CallActivityAsync<string>("Activity", taskName);
results.Add(result);
}
return results;
}
This orchestration calls an activity function for each item in a list, one after another.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Calling the activity function once per item in the input list.
- How many times: Once for each item in the input list (n times).
Each new item adds one more activity call, so the total calls grow directly with the number of items.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | 10 activity calls |
| 100 | 100 activity calls |
| 1000 | 1000 activity calls |
Pattern observation: The number of calls grows in a straight line as input size increases.
Time Complexity: O(n)
This means the orchestration time grows directly in proportion to the number of tasks it runs.
[X] Wrong: "Calling multiple activities in sequence runs all at once, so time stays the same no matter how many tasks."
[OK] Correct: Calling activities one after another means each waits for the previous to finish, so total time adds up with each task.
Understanding how orchestration patterns affect execution time helps you design efficient workflows and explain your choices clearly in real projects.
What if we changed the orchestration to call all activities in parallel instead of sequence? How would the time complexity change?