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);
        }