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.