Skip to content

Instantly share code, notes, and snippets.

@syrusakbary
Last active June 15, 2017 23:35
Show Gist options
  • Save syrusakbary/d825c1059ba5590a241e92e5caec56de to your computer and use it in GitHub Desktop.
Save syrusakbary/d825c1059ba5590a241e92e5caec56de to your computer and use it in GitHub Desktop.
Async/Await examples

This is a comparison of the different async/await strategies.

Python is the only language that doesn't execute the coroutines/tasks until you await for them.

# This program runs like the JS one (is the "fixed" version of the one with async/await syntax)
from asyncio import get_event_loop, ensure_future, coroutine
@coroutine
def third():
print("third")
yield
return 3
@coroutine
def second():
print("second")
call = third()
next(call)
print("third:called")
yield
result = yield from call
print("third:finished", result)
return 2
@coroutine
def first():
print("first")
call = second()
next(call)
print("second:called")
result = yield from call
print("second:finished", result)
return 1
async def main():
await first()
loop = get_event_loop()
loop.run_until_complete(main())
loop.close()
# This will output:
# first
# second
# third
# third:called
# second:called
# third:finished 3
# second:finished 2
using System;
using System.Threading.Tasks;
class Program
{
public static void Main()
{
// Start the HandleFile method.
Task<int> task = first();
}
static async Task<int> third()
{
Console.WriteLine("third");
return 3;
}
static async Task<int> second()
{
Console.WriteLine("second");
Task<int> task = third();
Console.WriteLine("third:called");
int result = await task;
Console.WriteLine("third:awaited " + result);
return 2;
}
static async Task<int> first()
{
Console.WriteLine("first");
Task<int> task = second();
Console.WriteLine("second:called");
int result = await task;
Console.WriteLine("second:awaited " + result);
return 1;
}
}
// Will output the following:
// first
// second
// third
// third:called
// third:awaited 3
// second:called
// second:awaited 2
async function third() {
console.log("third");
return 3;
}
async function second() {
console.log("second");
let call = third();
console.log("third:called");
let result = await call;
console.log("third:awaited", result);
return 2;
}
async function first() {
console.log("first");
let s = second();
console.log("second:called");
let result = await s;
console.log("second:awaited", result);
}
first().then();
// Will output the following:
// first
// second
// third
// third:called
// second:called
// third:awaited 3
// second:awaited 2
from asyncio import get_event_loop
async def third():
print("third")
return 3
async def second():
print("second")
call = third()
print("third:called")
result = await call
print("third:awaited", result)
return 1
async def first():
print("first")
call = second()
print("second:called")
result = await call
print("second:awaited", result)
return 1
async def main():
await first()
loop = get_event_loop()
loop.run_until_complete(main())
loop.close()
# Will output the following:
# first
# second:called
# second
# third:called
# third
# third:awaited 3
# second:awaited 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment