Zig: queue
const std = @import("std");
const Io = std.Io;
const Canceled = Io.Cancelable.Canceled;
const Closed = Io.QueueClosedError.Closed;
const Group = Io.Group;
const Queue = Io.Queue;
pub fn main(init: std.process.Init) !void {
const io = init.io;
var buffer: [2]u8 = undefined;
var queue: Queue(u8) = .init(&buffer);
var group: Group = .init;
group.async(io, sum, .{ io, &queue, 1, 2 });
group.async(io, sum, .{ io, &queue, 3, 4 });
try group.await(io);
queue.close(io);
while (true) {
const result = queue.getOne(io) catch break;
std.debug.print("result: {d}\n", .{result});
}
// result: 3
// result: 7
}
fn sum(io: Io, queue: *Queue(u8), a: u8, b: u8) !void {
queue.putOne(io, a + b) catch |err| switch (err) {
Closed => return,
Canceled => return Canceled,
};
}