summaryrefslogtreecommitdiffstatshomepage
path: root/exercises
diff options
context:
space:
mode:
authorDave Gauer <dave@ratfactor.com>2021-05-12 21:25:48 -0400
committerDave Gauer <dave@ratfactor.com>2021-05-12 21:25:48 -0400
commit3e5647d88cde9834dea4a71088cf63413f859f4e (patch)
tree9c313b7d437ae72eccdbc504b25d287ef5af8a3d /exercises
parent54c048b0a0ea5ee2136c4d4193660d4934eab925 (diff)
add ex086 async 3
Diffstat (limited to 'exercises')
-rw-r--r--exercises/086_async3.zig29
1 files changed, 29 insertions, 0 deletions
diff --git a/exercises/086_async3.zig b/exercises/086_async3.zig
new file mode 100644
index 0000000..ae5a9a6
--- /dev/null
+++ b/exercises/086_async3.zig
@@ -0,0 +1,29 @@
+//
+// Because they can suspend and resume, async Zig functions are
+// an example of a more general programming concept called
+// "coroutines". One of the neat things about Zig async functions
+// is that they retain their state as they are suspended and
+// resumed.
+//
+// See if you can make this program print "5 4 3 2 1".
+//
+const print = @import("std").debug.print;
+
+pub fn main() void {
+ const n = 5;
+ var foo_frame = async foo(n);
+
+ ???
+
+ print("\n", .{});
+}
+
+fn foo(countdown: u32) void {
+ var current = countdown;
+
+ while (current > 0) {
+ print("{} ", .{current});
+ current -= 1;
+ suspend;
+ }
+}