1# Test waiting on a task 2 3try: 4 import uasyncio as asyncio 5except ImportError: 6 try: 7 import asyncio 8 except ImportError: 9 print("SKIP") 10 raise SystemExit 11 12 13try: 14 import utime 15 16 ticks = utime.ticks_ms 17 ticks_diff = utime.ticks_diff 18except: 19 import time 20 21 ticks = lambda: int(time.time() * 1000) 22 ticks_diff = lambda t1, t0: t1 - t0 23 24 25async def task(t): 26 print("task", t) 27 28 29async def delay_print(t, s): 30 await asyncio.sleep(t) 31 print(s) 32 33 34async def task_raise(): 35 print("task_raise") 36 raise ValueError 37 38 39async def main(): 40 print("start") 41 42 # Wait on a task 43 t = asyncio.create_task(task(1)) 44 await t 45 46 # Wait on a task that's already done 47 t = asyncio.create_task(task(2)) 48 await asyncio.sleep(0.001) 49 await t 50 51 # Wait again on same task 52 await t 53 54 print("----") 55 56 # Create 2 tasks 57 ts1 = asyncio.create_task(delay_print(0.04, "hello")) 58 ts2 = asyncio.create_task(delay_print(0.08, "world")) 59 60 # Time how long the tasks take to finish, they should execute in parallel 61 print("start") 62 t0 = ticks() 63 await ts1 64 t1 = ticks() 65 await ts2 66 t2 = ticks() 67 print("took {} {}".format(round(ticks_diff(t1, t0), -1), round(ticks_diff(t2, t1), -1))) 68 69 # Wait on a task that raises an exception 70 t = asyncio.create_task(task_raise()) 71 try: 72 await t 73 except ValueError: 74 print("ValueError") 75 76 77asyncio.run(main()) 78