def METHOD_NAME(fut=None):
    if fut is None:
        # First call, do nothing
        pass
    elif fut.cancelled():
        # This is in response to an earlier .read() call, so don't
        # schedule another one!
        return
    elif fut.exception():
        pass
    else:
        try:
            self.parse_input(
                event_loop, callback, bytearray(fut.result()))
        except urwid.ExitMainLoop:
            # This will immediately close the transport and thus the
            # connection, which in turn calls connection_lost, which
            # stops the screen and the loop
            self.writer.abort()
    # create_task() schedules a coroutine without using `yield from` or
    # `await`, which are syntax errors in Pythons before 3.5
    self._pending_task = event_loop._loop.create_task(
        self.reader.read(1024))
    self._pending_task.add_done_callback(METHOD_NAME)