From 1c6487c1e79cbe0d59a39b483af8ec44b59c586e Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Fri, 3 Apr 2026 18:11:00 +0200 Subject: added async-io quiz --- exercises/089_async6.zig | 71 ------------------------------------------------ 1 file changed, 71 deletions(-) delete mode 100644 exercises/089_async6.zig (limited to 'exercises/089_async6.zig') diff --git a/exercises/089_async6.zig b/exercises/089_async6.zig deleted file mode 100644 index eab03c9..0000000 --- a/exercises/089_async6.zig +++ /dev/null @@ -1,71 +0,0 @@ -// -// Sometimes you want to race multiple tasks and act on whichever -// finishes first. That's what Select is for! -// -// Select is like a Group, but lets you receive individual results -// as tasks complete — one at a time: -// -// const Race = std.Io.Select(union(enum) { -// fast: u32, -// slow: u32, -// }); -// -// var buffer: [2]Race.Union = undefined; -// var sel = Race.init(io, &buffer); -// -// sel.async(.fast, fastFn, .{io}); -// sel.async(.slow, slowFn, .{io}); -// -// const winner = try sel.await(); // returns first completed -// switch (winner) { -// .fast => |val| ..., -// .slow => |val| ..., -// } -// sel.cancelDiscard(); // cancel remaining, discard results -// -// The buffer must be large enough for all tasks that might -// complete before you call cancelDiscard(). -// -// Fix this program to receive the winner of the race. -// -const std = @import("std"); -const print = std.debug.print; - -const RaceResult = std.Io.Select(union(enum) { - hare: []const u8, - tortoise: []const u8, -}); - -pub fn main(init: std.process.Init) !void { - const io = init.io; - - var buffer: [2]RaceResult.Union = undefined; - var sel = RaceResult.init(io, &buffer); - - sel.async(.hare, runHare, .{io}); - sel.async(.tortoise, runTortoise, .{io}); - - // Wait for the first finisher. - // What Select method returns the first completed result? - const winner = ???; - - switch (winner) { - .hare => |msg| print("Hare: {s}\n", .{msg}), - .tortoise => |msg| print("Tortoise: {s}\n", .{msg}), - } - - // Clean up the loser — we don't need their result. - sel.cancelDiscard(); -} - -fn runHare(io: std.Io) []const u8 { - // The hare is fast — only 1 second! - io.sleep(std.Io.Duration.fromSeconds(1), .awake) catch return "I got canceled!"; - return "I'm fast!"; -} - -fn runTortoise(io: std.Io) []const u8 { - // The tortoise is slow — 10 seconds. - io.sleep(std.Io.Duration.fromSeconds(10), .awake) catch return "I got canceled!"; - return "Slow and steady..."; -} -- cgit v1.2.3