static void Main(string[] args)
        {
            var telemetryClient = new TelemetryClient();

            //API one:

            //telemetryClient.RegisterAggregateMetric("MetricsGenerator", "City", percentileCalculation: PercentileCalculation.OrderByLargest);

            //for (double i = -50; i < 10000000; i += new Random().NextDouble())
            //{
            //    telemetryClient.TrackAggregateMetric("MetricsGenerator", i, "Seattle");
            //    telemetryClient.TrackAggregateMetric("MetricsGenerator", i, "New York");
            //}

            //API two:

            Random rand = new Random();
            telemetryClient.Gauge("active processes", () => { return rand.Next(10, 15); });

            var counter = telemetryClient.Counter("# of items");

            var meter = telemetryClient.Meter("rate of items");
            var aMeter = telemetryClient.Meter("rate of char a");

            while (true)
            {
                var queue = new ConcurrentQueue<char>();
                var a = Console.ReadKey().KeyChar;
                queue.Enqueue(a);
                counter.Increment();
                meter.Mark();
                if (a == 'a')
                {
                    aMeter.Mark();
                }
                else
                {
                    aMeter.Mark(0);
                }

                new Task(() =>
                {
                    Thread.Sleep(100);
                    char ch;
                    if (queue.TryDequeue(out ch))
                    {
                        counter.Decrement();
                        Console.Write(ch);
                    }
                }).Start();
            }
        }
        public void SimpleCounterUsageExample()
        {
            TelemetryConfiguration configuraiton = new TelemetryConfiguration();

            TelemetryClient client = new TelemetryClient(configuraiton);
            client.Context.Properties["a"] = "b";

            var simpleCounter = client.Counter("test");
            var counters = configuraiton.GetCounters();

            Assert.AreEqual(1, counters.Count);

            for (int i = 0; i < 10; i++)
            {
                simpleCounter.Increment();
            }

            MetricTelemetry metric = counters[0].GetValueAndReset();
            Assert.AreEqual(10, metric.Value);
            Assert.AreEqual(null, metric.Count);
            Assert.AreEqual("test", metric.Name);
            Assert.AreEqual("b", metric.Context.Properties["a"]);
        }
        public void CounterWillCopyTelemetryContextFromTelemetryClient()
        {
            TelemetryConfiguration configuraiton = new TelemetryConfiguration();

            TelemetryClient client = new TelemetryClient(configuraiton);
            client.Context.Properties["a"] = "b";
            client.Context.Component.Version = "10";
            client.Context.InstrumentationKey = "ikey";
            var simpleCounter = client.Counter("test");
            var counters = configuraiton.GetCounters();
            Assert.AreEqual(1, counters.Count);
            MetricTelemetry metric = counters[0].GetValueAndReset();

            client.Context.Device.Id = "device.id";

            // validate that copy was made at the moment of creation
            Assert.AreNotEqual(client.Context, metric.Context);
            Assert.AreNotEqual("device.id", metric.Context.Device.Id);

            Assert.AreEqual("b", metric.Context.Properties["a"]);
            Assert.AreEqual("10", metric.Context.Component.Version);
            Assert.AreEqual("ikey", metric.Context.InstrumentationKey);
        }