1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //
- // The power and purpose of async/await becomes more apparent
- // when we do multiple things concurrently. Foo and Bar do not
- // depend on each other and can happen at the same time, but End
- // requires that they both be finished.
- //
- // +---------+
- // | Start |
- // +---------+
- // / \
- // / \
- // +---------+ +---------+
- // | Foo | | Bar |
- // +---------+ +---------+
- // \ /
- // \ /
- // +---------+
- // | End |
- // +---------+
- //
- // We can express this in Zig like so:
- //
- // fn foo() u32 { ... }
- // fn bar() u32 { ... }
- //
- // // Start
- //
- // var foo_frame = async foo();
- // var bar_frame = async bar();
- //
- // var foo_value = await foo_frame;
- // var bar_value = await bar_frame;
- //
- // // End
- //
- // Please await TWO page titles!
- //
- const print = @import("std").debug.print;
- pub fn main() void {
- var com_frame = async getPageTitle("http://example.com");
- var org_frame = async getPageTitle("http://example.org");
- var com_title = com_frame;
- var org_title = org_frame;
- print(".com: {s}, .org: {s}.\n", .{com_title, org_title});
- }
- fn getPageTitle(url: []const u8) []const u8 {
- // Please PRETEND this is actually making a network request.
- return "Example Title";
- }
|