Browse Source

add ex085 async 2

Dave Gauer 4 years ago
parent
commit
54c048b0a0
3 changed files with 35 additions and 0 deletions
  1. 4 0
      build.zig
  2. 29 0
      exercises/085_async2.zig
  3. 2 0
      patches/patches/085_async2.patch

+ 4 - 0
build.zig

@@ -418,6 +418,10 @@ const exercises = [_]Exercise{
         .output = "foo() A",
         .hint = "Read the facts. Use the facts.",
     },
+    .{
+        .main_file = "085_async2.zig",
+        .output = "Hello async!",
+    },
 };
 
 /// Check the zig version to make sure it can compile the examples properly.

+ 29 - 0
exercises/085_async2.zig

@@ -0,0 +1,29 @@
+//
+// So, 'suspend' returns control to the place from which it was
+// called (the "call site"). How do we control back to the
+// suspended function?
+//
+// For that, we have a new keyword called 'resume' which takes an
+// async function invocation's frame and returns control to it.
+//
+//     fn fooThatSuspends() void {
+//         suspend;
+//     }
+//
+//     var foo_frame = async fooThatSuspends();
+//     resume foo_frame;
+//
+// See if you can make this program print "Hello async!".
+//
+const print = @import("std").debug.print;
+
+pub fn main() void {
+    var foo_frame = async foo();
+}
+
+fn foo() void {
+    print("Hello ", .{});
+    suspend;
+    print("async!\n", .{});
+}
+

+ 2 - 0
patches/patches/085_async2.patch

@@ -0,0 +1,2 @@
+21a22
+>     resume foo_frame;