Asyncio uses cooperative multitasking to achieve concurrency. When our application reaches a point where it could wait a while for a result to come back, we explicitly mark this in code.
async - let us to define a coroutine.
await - let us pause our coroutine when we have a long-running operation. Blocking operation.
Task - wraps a coroutine and schedules it to run on the event loop immediately (in the background). The task starts running as soon as the event loop gets a chance (e.g., when you next await something; await triggers an iteration of the event loop).
Task can be cancelled:
long_task = asyncio.create_task(delay(10)) while not long_task.done(): long_task.cancel() try: await long_task except CancelledError: print("Our task was cancelled")