summaryrefslogtreecommitdiff
path: root/exercises/092_async9.zig
diff options
context:
space:
mode:
authorChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 18:11:00 +0200
committerChris Boesch <chrboesch@noreply.codeberg.org>2026-04-03 18:11:00 +0200
commit1c6487c1e79cbe0d59a39b483af8ec44b59c586e (patch)
tree22f774d62d15252e17db75b22be40d7606fe606f /exercises/092_async9.zig
parent25009361533be5e45cf59d9840edf5d13cfb8d6d (diff)
added async-io quiz
Diffstat (limited to 'exercises/092_async9.zig')
-rw-r--r--exercises/092_async9.zig57
1 files changed, 0 insertions, 57 deletions
diff --git a/exercises/092_async9.zig b/exercises/092_async9.zig
deleted file mode 100644
index ad30dcf..0000000
--- a/exercises/092_async9.zig
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// We've been using io.async() to launch tasks. But there's a
-// stronger variant: io.concurrent().
-//
-// The difference:
-//
-// io.async():
-// * The function MAY run on another thread, or it may run
-// immediately on the current thread (synchronously).
-// * Never fails — if no thread is available, it just runs
-// the function right away.
-// * More portable, works with all Io backends.
-//
-// io.concurrent():
-// * GUARANTEES a separate unit of concurrency (a real thread
-// in the Threaded backend).
-// * Can fail with error.ConcurrencyUnavailable if resources
-// are exhausted or the backend doesn't support it.
-// * Use when you NEED true parallelism.
-//
-// Because concurrent() can fail, you must handle the error:
-//
-// var future = try io.concurrent(myFn, .{args});
-// const result = future.await(io);
-//
-// Notice the 'try' — that's the key difference in usage!
-//
-// Fix this program to launch the computation concurrently.
-//
-const std = @import("std");
-const print = std.debug.print;
-
-pub fn main(init: std.process.Init) !void {
- const io = init.io;
-
- // Launch with a guaranteed separate thread.
- // Which Io method guarantees true concurrency?
- // (Hint: unlike io.async, this one can fail!)
- var future = try io.???(compute, .{io});
-
- print("Main thread continues...\n", .{});
-
- // Wait 100 millisecond so the output order is deterministic.
- io.sleep(std.Io.Duration.fromMilliseconds(100), .awake) catch {};
-
- print("Main thread done waiting.\n", .{});
-
- const result = future.await(io);
- print("Result: {}\n", .{result});
-}
-
-fn compute(io: std.Io) u32 {
- print("Computing on a separate thread!\n", .{});
- // Simulate some work.
- io.sleep(std.Io.Duration.fromMilliseconds(200), .awake) catch return 0;
- return 123;
-}