title: Will every 'await' operator result in a state machine?
body: <p>Please consider the following code:</p>
  
  <pre><code>public async Task&lt;string&gt; GetString()
  {
      //Some code here...
      var data = await A();
      //Some more code...
      return data;
  }
  private async Task&lt;string&gt; A()
  {
      //Some code here..
      var data = await B();
      //manipulating data...
      return data;
  }
  private async Task&lt;string&gt; B()
  {
      //Some code here..
      var data = await C();
      //manipulating data...
      return data;
  }
  private async Task&lt;string&gt; C()
  {
      //Some code here..
      var data = await FetchFromDB();
      //manipulating data...
      return data;
  }
  private async Task&lt;string&gt; FetchFromDB()
  {
      return await SOME_HTTP_REQUEST;
  }
  </code></pre>
  
  <p>This code demonstrate a most basic functionality - nested async methods. 
  Will every method get translate into a state machine? Or is the compiler sophisticated enough to generate a more efficient structure? 
  In some of my projects, there are ~20 methods between the UI/WebAPI and the I/O call - does that affect the trade-off between the async-await overhead (such as the state machine) and the non-blocking thread benefits? 
  I mean, if, for example, the overhead of 4 state machines (4 nested async methods) equals to 50ms of blocking I/O (in terms of trade-off), will 20 state machine be equal to longer I/O's delay (250ms)? </p>