title: How to make Dispose await for all async methods?
body: <p>I have disposable class with async methods.</p>
  
  <pre><code>class Gateway : IDisposable {
    public Gateway() {}
    public void Dispose() {}
  
    public async Task&lt;Data&gt; Request1 () {...}
    public async Task&lt;Data&gt; Request2 () {...}
    public async Task&lt;Data&gt; Request3 () {...}
  }
  </code></pre>
  
  <p>I need Dispose to await until all running requests are completed. </p>
  
  <p>So, either I need to track of all running tasks, or use <code>AsyncLock</code> from AsyncEx, or something else?</p>
  
  <p><strong>Updated</strong></p>
  
  <p>As I can see someone is afraid of blocking Dispose. Then we could make <code>Task WaitForCompletionAsync()</code> or <code>Task CancelAllAsync()</code> methods.</p>