From 110e556ae1b171fc324f3590f787e111928ff5bb Mon Sep 17 00:00:00 2001 From: Dave Gauer Date: Thu, 13 May 2021 19:48:10 -0400 Subject: add ex088 async 5 await --- exercises/088_async5.zig | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 exercises/088_async5.zig (limited to 'exercises') diff --git a/exercises/088_async5.zig b/exercises/088_async5.zig new file mode 100644 index 0000000..523fa73 --- /dev/null +++ b/exercises/088_async5.zig @@ -0,0 +1,47 @@ +// +// Sure, we can solve our async value problem with a global +// variable. But this hardly seems like an ideal solution. +// +// So how do we REALLY get return values from async functions? +// +// The 'await' keyword waits for an async function to complete +// and then captures its return value. +// +// fn foo() u32 { +// return 5; +// } +// +// var foo_frame = async foo(); // invoke and get frame +// var value = await foo_frame; // await result using frame +// +// The above example is just a silly way to call foo() and get 5 +// back. But if foo() did something more interesting such as wait +// for a network response to get that 5, our code would pause +// until the value was ready. +// +// As you can see, async/await basically splits a function call +// into two parts: +// +// 1. Invoke the function ('async') +// 2. Getting the return value ('await') +// +// Also notice that a 'suspend' keyword does NOT need to exist in +// a function to be called in an async context. +// +// Please use 'await' to get the string returned by +// getPageTitle(). +// +const print = @import("std").debug.print; + +pub fn main() void { + var myframe = async getPageTitle("http://example.com"); + + var value = ??? + + print("{s}\n", .{value}); +} + +fn getPageTitle(url: []const u8) []const u8 { + // Please PRETEND this is actually making a network request. + return "Example Title."; +} -- cgit v1.2.3-70-g09d2