Skip to main content

Async / Await

Similar to how well formed code has a suspend for every resume, each async function invocation with a return value must be matched with an await. The value yielded by await on the async frame corresponds to the function's return.

You may notice that func3 here is a normal function (i.e. it has no suspend points - it is not an async function). Despite this, func3 can work as an async function when called from an async invocation; the calling convention of func3 doesn't have to be changed to async - func3 can be of any calling convention.

fn func3() u32 {
return 5;

test "async / await" {
var frame = async func3();
try expect(await frame == 5);

Using await on an async frame of a function which may suspend is only possible from async functions. As such, functions that use await on the frame of an async function are also considered async functions. If you can be sure that the potential suspend doesn't happen, nosuspend await will stop this from happening.