public async Task LoadPricing() { var tableName = Constants.PricingTable; await CreateTable(tableName); CommandLine.InformUser("Loader", "Generating data for " + tableName); var rows = Generator.GeneratePricing(Constants.PricingIdsToCreate, Constants.PricingRowsPerId); var count = 0; const int batchSize = BatchAndPoolSize; const int total = Constants.PricingIdsToCreate * Constants.PricingRowsPerId / batchSize; var cursor = Console.CursorTop; foreach (var batch in rows.Batch(batchSize)) { var rowTasks = batch.Select(row => Task.Run(() => { // Get key var key = (string)row["Key"]; // Remove from hash for ease row.Remove("Key"); // Write the row _dataClient.WriteRowAsync(tableName, key, row.Select(kv => BigChange.CreateCellUpdate(Constants.ColumnFamilyName, kv.Key, kv.Value.ToString()))).Wait(); })).ToArray(); // Keep user updated Console.CursorTop = cursor; CommandLine.InformUser("Loader", String.Format("Writing {0}: {1}%", tableName, count++ *100 / total)); Task.WhenAll(rowTasks).Wait(); // silly syntax to avoid resharper warning } // Keep user updated Console.CursorTop = cursor; CommandLine.InformUser("Loader", String.Format("Wrote {0}: 100% ", tableName)); }
private IEnumerable <BigChange> ExtractChanges <T>(ReflectionCache reflection, T instance) { var result = new List <BigChange>(); reflection.ExtractChanges(instance, (familyName, fieldName, value) => result.Add(BigChange.CreateCellUpdate(familyName, fieldName, value))); return(result); }