diff options
Diffstat (limited to 'exercises')
-rw-r--r-- | exercises/090_async7.zig | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/exercises/090_async7.zig b/exercises/090_async7.zig new file mode 100644 index 0000000..89113bd --- /dev/null +++ b/exercises/090_async7.zig @@ -0,0 +1,43 @@ +// +// Remember how a function with 'suspend' is async and calling an +// async function without the 'async' keyword makes the CALLING +// function async? +// +// fn fooThatMightSuspend(maybe: bool) void { +// if (maybe) suspend {} +// } +// +// fn bar() void { +// fooThatMightSuspend(true); // Now bar() is async! +// } +// +// But if you KNOW the function won't suspend, you can make a +// promise to the compiler with the 'nosuspend' keyword: +// +// fn bar() void { +// nosuspend fooThatMightSuspend(false); +// } +// +// If the function does suspend and YOUR PROMISE TO THE COMPILER +// IS BROKEN, the program will panic at runtime, which is +// probably better than you deserve, you oathbreaker! >:-( +// +const print = @import("std").debug.print; + +pub fn main() void { + + // The main() function can not be async. But we know + // getBeef() will not suspend with this particular + // invocation. Please make this okay: + var my_beef = getBeef(0); + + print("beef? {X}!\n", .{my_beef}); +} + +fn getBeef(input: u32) u32 { + if (input > 0xDEAD) { + suspend {} + } + + return 0xBEEF; +} |