add ex087 async 4

This commit is contained in:
Dave Gauer 2021-05-12 21:36:57 -04:00
parent 3e5647d88c
commit be279c78f5
3 changed files with 44 additions and 0 deletions

View file

@ -426,6 +426,10 @@ const exercises = [_]Exercise{
.main_file = "086_async3.zig", .main_file = "086_async3.zig",
.output = "5 4 3 2 1", .output = "5 4 3 2 1",
}, },
.{
.main_file = "087_async4.zig",
.output = "1 2 3 4 5",
},
}; };
/// Check the zig version to make sure it can compile the examples properly. /// Check the zig version to make sure it can compile the examples properly.

30
exercises/087_async4.zig Normal file
View file

@ -0,0 +1,30 @@
//
// It has probably not escaped your attention that we are no
// longer capturing a return value from foo() because the 'async'
// keyword returns the frame instead.
//
// One way to solve this is to use a global variable.
//
// See if you can make this program print "1 2 3 4 5".
//
const print = @import("std").debug.print;
var global_counter: i32 = 0;
pub fn main() void {
var foo_frame = async foo();
while (global_counter <= 5) {
print("{} ", .{global_counter});
???
}
print("\n", .{});
}
fn foo() void {
while (true) {
???
???
}
}

View file

@ -0,0 +1,10 @@
19c19
< ???
---
> resume foo_frame;
27,28c27,28
< ???
< ???
---
> global_counter += 1;
> suspend;