public static async Task <HttpResponseMessage> HttpStart( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClient starter, ILogger log) { string runId = Guid.NewGuid().ToString(); int partitionCount = await GetCosmosDBPartitionCount(); log.LogInformation("Triggered run for {RunId}. Cosmos DB has {PartitionCount} partitions.", runId, partitionCount); LoadGeneratorOptions loadGeneratorOptions = LoadGeneratorOptions.Create(partitionCount, runId, RuntimeMinutes, SleepTimeSeconds); await starter.StartNewAsync(LoadGeneratorFunctionName, loadGeneratorOptions); return(req.CreateResponse(loadGeneratorOptions)); }
public static async Task RunOrchestrator( [OrchestrationTrigger] DurableOrchestrationContext context) { LoadGeneratorOptions options = context.GetInput <LoadGeneratorOptions>(); int runCount = options.RunCount; for (int runNumber = 0; runNumber < runCount; runNumber++) { Task[] taskList = new Task[options.ItemsPerRunCount]; for (int runItemNumber = 0; runItemNumber < options.ItemsPerRunCount; runItemNumber++) { DocDBRecord docDbRecord = DocDBRecord.Create(runNumber, runItemNumber, options.RunId, context.CurrentUtcDateTime.ToShortTimeString()); taskList[runItemNumber] = context.CallActivityAsync(SaveDocumentFunctionName, docDbRecord); } await Task.WhenAll(taskList); await context.CreateTimer(context.CurrentUtcDateTime.AddSeconds(options.SleepTimeInSeconds), CancellationToken.None); } }