#!/usr/bin/env python3
# -*- coding:UTF-8 -*-

#Copyright (c) 1986 Nick Wong.
#Copyright (c) 2016-2026 TP-NEW Corp.
# License: TP-NEW (www.tp-new.com)

__author__ = "Nick Wong"

"""
用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型，然后在coroutine内部用yield from调用另一个coroutine实现异步操作
从Python 3.5开始引入了新的语法async和await，可以让coroutine的代码更简洁易读
#generator(生成器)
#coroutine(协程)

async和await是针对coroutine的新语法，要使用新的语法，只需要做两步简单的替换：
1.把@asyncio.coroutine替换为async；
2.把yield from替换为await。


"""

import asyncio
#########旧代码#########
@asyncio.coroutine
def hello():
    print('Hello World!')
    r = yield from asyncio.sleep(2)
    print('Hello again!')

#########新代码#########
async def hello1():   #注:async后跟的函数不能换行，否则语法错误
    print('Hello World! 1')
    r = await asyncio.sleep(2)

#获取EventLoop:
loop = asyncio.get_event_loop()
#执行coroutine
loop.run_until_complete(hello())
loop.run_until_complete(hello1())
loop.close()
    print('Hello again! 1')