title: Strange AssertionError in asyncio
body: <p>I'm trying to mark future done by timeout with this code:</p>
  
  <pre><code>import asyncio
  
  
  @asyncio.coroutine
  def greet():
      while True:
          print('Hello World')
          yield from asyncio.sleep(1)
  
  @asyncio.coroutine
  def main():
      future = asyncio.async(greet())
      loop.call_later(3, lambda: future.set_result(True))
      yield from future
      print('Ready')
  
  loop = asyncio.get_event_loop()
  loop.run_until_complete(main())
  </code></pre>
  
  <p>"Timer" loop.call_later sets result to future after 3 seconds. It works, but I'm getting exception too:</p>
  
  <pre><code>Hello World
  Hello World
  Hello World
  Ready
  Exception in callback &lt;bound method Task._wakeup of Task(&lt;greet&gt;)&lt;result=True&gt;&gt;(Future&lt;result=None&gt;,)
  handle: Handle(&lt;bound method Task._wakeup of Task(&lt;greet&gt;)&lt;result=True&gt;&gt;, (Future&lt;result=None&gt;,))
  Traceback (most recent call last):
    File "C:\Python33\lib\site-packages\asyncio\events.py", line 39, in _run
      self._callback(*self._args)
    File "C:\Python33\lib\site-packages\asyncio\tasks.py", line 337, in _wakeup
      self._step(value, None)
    File "C:\Python33\lib\site-packages\asyncio\tasks.py", line 267, in _step
      '_step(): already done: {!r}, {!r}, {!r}'.format(self, value, exc)
  AssertionError: _step(): already done: Task(&lt;greet&gt;)&lt;result=True&gt;, None, None
  </code></pre>
  
  <p>What can mean this AssertionError? Am I doing something wrong setting future done by loop.call_later?</p>