title: Why do most asyncio examples use loop.run_until_complete()?
body: <p>I was going through the Python documentation for <code>asyncio</code> and I'm wondering why most examples use <code>loop.run_until_complete()</code> as opposed to <code>Asyncio.ensure_future()</code>.</p>
  
  <p>For example: <a href="https://docs.python.org/dev/library/asyncio-task.html" rel="noreferrer">https://docs.python.org/dev/library/asyncio-task.html</a></p>
  
  <p>It seems <code>ensure_future</code> would be a much better way to demonstrate the advantages of non-blocking functions. <code>run_until_complete</code> on the other hand, blocks the loop like synchronous functions do. </p>
  
  <p>This makes me feel like I should be using <code>run_until_complete</code> instead of a combination of <code>ensure_future</code>with <code>loop.run_forever()</code> to run multiple co-routines concurrently.</p>