import asyncio class It: def __init__(self): self.value = 0 def __iter__(self): return self def __next__(self): if self.value > 10: raise StopIteration('STOPITERATION') self.value += 1 return class Qwe: def __await__(self): return It() class Qwe2(asyncio.Future): def __init__(self): self.value = 0 def __await__(self): while self.value < 10: yield self self.value += 1 return 'RETURN' async def tratata(): print('In tratata before') r = await Qwe() print('In tratata after') # print('Result: ', r) return r async def tratata2(): print('In tratata2 before') r = await Qwe2() # print('Result: ', r) print('In tratata2 after') return r async def main(): task = asyncio.create_task(tratata()) task2 = asyncio.create_task(tratata2()) result = await asyncio.gather(task, task2) print(result) asyncio.run(main())