|
@@ -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;
|
|
|
+ }
|
|
|
+}
|