title: gRPC client do not dispose Channel
body: <p>I'm developing .net core 2.0 application with gRPC and find out a problem: after delete reference to instance of my gRPC client class, there still channel that use resourses (memory and processor).
  Example code:</p>
  
  <pre><code>public class MyClient : ClientBase
      {
          public MyClient(Channel channel) : base(channel)
          {
          }
      }
  
      internal class Program
      {
          private static void Main(string[] args)
          {
              var list = new List&lt;MyClient&gt;();
              for (var i = 0; i &lt; 10000; i++)
              {
                  Console.WriteLine($"Creating {i} instance");
                  list.Add(new MyClient(new Channel("127.0.0.1:61783", ChannelCredentials.Insecure)));
              }
  
              Console.WriteLine("press enter to list = null");
              Console.ReadLine();
              list = null;
  
              Console.WriteLine("press enter to GC.Collect();");
              Console.ReadLine();
              GC.Collect();
  
              Console.WriteLine("press enter to exit");
              Console.ReadLine();
          }
      }
  </code></pre>
  
  <p>If u run example, u'll see that 10% (on my PC) used by this application. Even after <em>list = null</em> and <em>GC.Collect()</em></p>
  
  <p>The reason i suppose is  <strong>ClientBase</strong> do not call <strong>Channel.ShutdownAsync()</strong>. </p>
  
  <p>So the question is:</p>
  
  <p><strong>What is the better way to resolve problem?</strong></p>
  
  <p>p.s. actually i use a "generated by the protocol buffer compiler" Client </p>
  
  <pre><code>Client: Grpc.Core.ClientBase&lt;TDto&gt;
  </code></pre>
  
  <p>and i can't explicitly change finalizer in generated class</p>