public static async Task Run( [QueueTrigger("%LoadQueueName%", Connection = "AzureWebJobsStorage")] LoadJob job, ILogger log) { var blobClient = blobClients.GetOrAdd(job.Account, (accName) => { string connectionEnvironmentVariableName = $"STORAGECONNECTION_{job.Account}"; string connectionString = Environment.GetEnvironmentVariable(connectionEnvironmentVariableName) ?? throw new Exception($"Cannot find connection string environment variable '{connectionEnvironmentVariableName}'."); CloudStorageAccount account = CloudStorageAccount.Parse(connectionString); return(account.CreateCloudBlobClient()); }); var container = blobClient.GetContainerReference(job.Container); var inputBlock = new BufferBlock <ThermostatLog>(); var sendBlock = new ActionBlock <ThermostatLog>(async thermostatLog => { var filename = $"{thermostatLog.GetFileIdentifier()}.csv"; var blob = container.GetBlockBlobReference(filename); blob.Properties.ContentType = "text/csv"; using (var stream = await blob.OpenWriteAsync()) using (var writer = new StreamWriter(stream)) { csvUtils.ToCsv(writer, thermostatLog.Readings); } }, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 16 }); inputBlock.LinkTo(sendBlock, new DataflowLinkOptions { PropagateCompletion = true }); var random = new Random(); for (int i = 0; i < job.Size; i++) { inputBlock.Post(ThermostatLog.GenerateRandomLog(random)); } inputBlock.Complete(); await sendBlock.Completion; }
public static string WriteRandomCsv() { var random = new Random(); var log = ThermostatLog.GenerateRandomLog(random); var path = Path.Combine(Directory.GetCurrentDirectory(), "temp", log.GetFileIdentifier() + ".csv"); var utils = new CsvUtils(); using (var stream = File.OpenWrite(path)) using (var writer = new StreamWriter(stream)) { utils.ToCsv(writer, log.Readings); } Console.WriteLine($"Wrote: {path}"); return(path); }