Blocks until a permit is available and consumes a single one.
Unblocks without consuming a permit when canceled.
See also:
waitTimeoutwaitUncancelablepub fn wait(s: *Semaphore, io: Io) Io.Cancelable!void
pub fn wait(s: *Semaphore, io: Io) Io.Cancelable!void {
s.waitTimeout(io, .none) catch |err| switch (err) {
error.Timeout => unreachable,
error.Canceled => |e| return e,
};
}