public static async Task Run([OrchestrationTrigger] DurableOrchestrationContext context,
                                     ILogger log, ExecutionContext executionContext)
        {
            //config and input
            var config        = executionContext.BuildConfiguration();
            var vmsinScaleSet = int.Parse(config["MaxVmsInScaleSet"]);
            var waitTime      = int.Parse(config["WaitTime"]);
            var input         = new {
                Name  = context.GetInput <Tuple <string, int> >().Item1,
                Scale = context.GetInput <Tuple <string, int> >().Item2
            };

            log.LogInformation($"orchestrate create cluster name {input.Name} with scale {input.Scale}");

            // create resource group
            await context.CreateResourceGroupActivity(input.Name);

            // partition to tasks of provision\wait interleaved calls.
            foreach (var task in input.Scale
                     .PartitionSum(NonZeroInt.Make(vmsinScaleSet))
                     .MakeInterleavedCalls(
                         async t => await context.ProvisionTask(input.Name, t.Item1, t.Item2, await context.CopyStoargeTask(input.Name, t.Item1)),
                         t => context.WaitTask(waitTime)))
            {
                await task();
            }
        }