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