Zig: async
const std = @import("std");
const Cancelable = Io.Cancelable;
const Duration = Io.Duration;
const Io = std.Io;
const Timestamp = Io.Timestamp;
pub fn main(init: std.process.Init) !void {
const io = init.io;
var task1 = io.async(work, .{ io, 1, 2 });
var task2 = io.async(work, .{ io, 3, 4 });
const start = Timestamp.now(io, .awake);
try io.sleep(.fromSeconds(1), .awake);
const result1 = try task1.await(io);
const result2 = try task2.await(io);
std.debug.print("elapsed {}\n", .{start.untilNow(io, .awake).toSeconds()});
std.debug.print("total sum {d}\n", .{result1 + result2});
// work(1, 2) finished
// work(3, 4) finished
// elapsed 1 second(s)
// total sum 10
}
fn work(io: Io, a: u8, b: u8) Cancelable!u8 {
defer {
std.debug.print("work({d}, {d}) finished\n", .{ a, b });
}
try io.sleep(.fromSeconds(1), .awake);
return a + b;
}