public Simulator(CosmosDBInfo cosmosDB, CancellationToken token) { _token = token; _cosmosDB = cosmosDB; _client = new DocumentClient( new Uri(_cosmosDB.EndpointUri), _cosmosDB.Key, new ConnectionPolicy { ConnectionMode = ConnectionMode.Direct, ConnectionProtocol = Protocol.Tcp } ); }
static async Task Main(string[] args) { string sensorId = string.Empty; var cosmosDBInfo = new CosmosDBInfo() { EndpointUri = ConfigurationManager.AppSettings?["CosmosDB:EndpointURI"], Key = ConfigurationManager.AppSettings?["CosmosDB:Key"], Database = ConfigurationManager.AppSettings?["CosmosDB:Database"], Collection = ConfigurationManager.AppSettings?["CosmosDB:Collection:Raw"] }; if (args.Count() == 1) { sensorId = args[0]; } if (string.IsNullOrEmpty(sensorId)) { Console.WriteLine("Please specify SensorId range. Eg: sensor-data-producer 1-10"); return; } int s = 0; int e = 0; if (sensorId.Contains("-")) { var split = sensorId.Split('-'); if (split.Count() != 2) { Console.WriteLine("Range must be in the form N-M, where N and M are positive integers. Eg; 1-10"); return; } Int32.TryParse(split[0], out s); Int32.TryParse(split[1], out e); } else { s = 1; Int32.TryParse(sensorId, out e); } if (s == 0 || e == 0) { Console.WriteLine("Provided SensorId must be an integer number or a range of positive integers in the form N-M. Eg: 1-10"); return; } var tasks = new List <Task>(); var cts = new CancellationTokenSource(); var simulator = new Simulator(cosmosDBInfo, cts.Token); foreach (int i in Enumerable.Range(s, e)) { tasks.Add(new Task(async() => await simulator.Run(i), TaskCreationOptions.LongRunning)); } tasks.ForEach(t => t.Start()); Console.WriteLine("Press any key to terminate simulator"); Console.ReadKey(true); cts.Cancel(); Console.WriteLine("Cancel requested..."); await Task.WhenAll(tasks.ToArray()); Console.WriteLine("Done."); }