what does `yield from asyncio.sleep(delay)` do? : <p>The following example from Python in a Nutshell sets  <code>x</code> to  <code>23</code>  after a delay of a second and a half:</p>

<pre><code>@asyncio.coroutine
def delayed_result(delay, result):
  yield from asyncio.sleep(delay)
  return result

loop = asyncio.get_event_loop()
x = loop.run_until_complete(delayed_result(1.5, 23))
</code></pre>

<p>I feel difficult to understand what <code>yield from asyncio.sleep(delay)</code>    does.</p>

<p>From <a href="https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep" rel="noreferrer">https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep</a></p>

<blockquote>
<pre><code>Coroutine asyncio.sleep(delay, result=None, *, loop=None)
</code></pre>
  
  <p>Create a coroutine that completes after a given time (in seconds). If
  result is provided, it is produced to the caller when the coroutine
  completes.</p>
</blockquote>

<p>So <code>asyncio.sleep(delay)</code> returns a coroutine object.</p>

<p>What does a coroutine object "completes" mean?</p>

<p>What values does <code>yield from asyncio.sleep(delay)</code> provide to the main program?</p>

<p>Thanks.</p>
