title: WriteAsync with timeout
body: <p>I try to code a simple async write with timeout as below and expect the function to throw a TaskCanceledException given a very large buffer and small waitTime.  However, this does not happen. WriteAsync will block for many seconds until the write completes. What am I missing?  </p>
  
  <pre><code>public async void WriteWithTimeout(Stream os, byte[] buf, int waitMs)
  {
      CancellationTokenSource tokenSource = new CancellationTokenSource(waitMs); // cancel after waitMs milliseconds.
      await os.WriteAsync(buf, 0, buf.Length, tokenSource.Token);
  
      return;
  }
  </code></pre>
  
  <p>Call from GUI thread:</p>
  
  <pre><code>try
  {
      WriteWithTimeout(response.OutputStream, buf100M, w1ms);
  }
  catch(OperationCanceledException e)
  {
      ConsoleWriteLine("Failed with exception: {0}", e.Message);
  }        
  </code></pre>