private static Task run(ProxyCache.ProxyCacheClient client)
 {
     for (int i = 0; i < 1000; i++)
     {
         client.SetAsync(SetPRequest(Guid.NewGuid().ToString(), "hola mundo"));
     }
     return(Task.CompletedTask);
 }
        static async Task Main2(string[] args)
        {
            await Task.Delay(35000);

            ThreadPool.SetMinThreads(25000, 25000);

            var channel0 = new Channel("localhost", 91, ChannelCredentials.Insecure);
            var channel1 = new Channel("localhost", 91, ChannelCredentials.Insecure);
            var channel2 = new Channel("localhost", 91, ChannelCredentials.Insecure);
            var client0  = new ProxyCache.ProxyCacheClient(channel0);
            var client1  = new ProxyCache.ProxyCacheClient(channel1);
            var client2  = new ProxyCache.ProxyCacheClient(channel2);
            var response = client0.Set(SetPRequest("superkey", "hola mundo"));

            Console.WriteLine("Status Set keys {0}", response.Results.FirstOrDefault().Status);

            var valor = client0.Get(GetPRequest("superkey"));

            Console.WriteLine("Fetch Value  {0}", valor.Results.FirstOrDefault().Value.ToStringUtf8());

            var deleted = await client0.DeleteAsync(SetPRequest("superkey"));

            Console.WriteLine("Value deleted {0}", deleted.Results.FirstOrDefault().Status);

            var deletedNonExist = await client0.DeleteAsync(SetPRequest("superkey-notexists"));

            Console.WriteLine("Value not deleted {0}", deletedNonExist?.Results?.FirstOrDefault()?.Status);

            var sw = new Stopwatch();

            for (int i = 0; i < 1000000; i++)
            {
                sw.Restart();
                //for (int ix = 0; ix < 10000; ix++)
                //{
                //   await client0.GetAsync(GetRequest("superkey"));
                //    // await client0.SetAsync(SetRequest("superkey", "hola mundo"));
                //}

                var tasks = new[]
                {
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1),
                    run(client2),
                    run(client0),
                    run(client1)
                };
                await Task.WhenAll(tasks);

                Console.WriteLine($"Elapsed {sw.ElapsedMilliseconds} ratio {40000 / sw.Elapsed.TotalSeconds }");
                await Task.Delay(4000);
            }
        }