fn batchAwaitAsync(userdata: ?*anyopaque, batch: *Io.Batch) Io.Cancelable!void userdata: ?*anyopaquebatch: *Io.Batch2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220fn batchAwaitAsync(userdata: ?*anyopaque, batch: *Io.Batch) Io.Cancelable!void {
const ev: *Evented = @ptrCast(@alignCast(userdata));
var maybe_sync: CancelRegion.Sync.Maybe = .{ .cancel_region = .init() };
defer maybe_sync.deinit(ev);
ev.batchDrainSubmitted(&maybe_sync, batch, false) catch |err| switch (err) {
error.ConcurrencyUnavailable => unreachable, // passed concurrency=false
error.Canceled => |e| return e,
};
maybe_sync.leaveSync(ev);
while (true) {
batchDrainReady(batch) catch |err| switch (err) {
error.Timeout => unreachable, // no timeout
};
if (batch.completed.head != .none or batch.pending.head == .none) return;
ev.yield(null, .{ .batch_await = batch });
}
}