futurez is a small runtime for running asynchronous tasks using futures in Zig.
const std = @import("std");
const futurez = @import("futurez");
const Runtime = futurez.Runtime;
fn main() !void {
const allocator = std.heap.page_allocator;
var rt = try Runtime.init(allocator);
defer rt.deinit();
const task = try rt.spawn(myTaskFunction, .{});
const result = task.join(i32);
std.debug.print("Result: {d}\n", .{result});
}
fn myTaskFunction() i32 {
return 42;
}For a complete example showcasing advanced usage with dynamic allocations and multiple parameters, see examples/basic.zig.
futurez spawns as many worker threads as logical CPU cores available on your machine. These threads continuously pick up and run asynchronous tasks you spawn via Runtime.spawn. Finished tasks remain in the task queue until you call the join() method on the associated *Task to retrieve the result.
You can also control the number of worker threads by initializing the runtime with a specific core count using initWithCores():
const allocator = std.heap.page_allocator;
var rt = try Runtime.initWithCores(allocator, 4);
defer rt.deinit();