title: Python 3 asyncio - yield from vs asyncio.async stack usage
body: <p>I'm evaluating different patterns for periodic execution (actual sleep/delays ommited for brevity) using the Python 3 asyncio framework, and I have two pieces of code that behave diffrently and I can't explain why. The first version, which uses <code>yield from</code> to call itself recursively exhausts the stack in about 1000 iterations, as I expected. The second version calls the coroutine recursively, but delegates actual event loop execution to <code>asyncio.async</code> and doesn't exhaust the stack. Can you explain in detail why the stack isn't being used by the second version? What are the differences between the two ways of executing this coroutine?</p>
  
  <p>First version (yield from):</p>
  
  <pre><code>@asyncio.coroutine
  def call_self(self, i):
      print('calling self', i)
      yield from self.call_self(i + 1)
  </code></pre>
  
  <p>Second version (asyncio.async):</p>
  
  <pre><code>@asyncio.coroutine
  def call_self(self, i):
      print('calling self', i)
      asyncio.async(self.call_self(i + 1))
  </code></pre>