Maybe.. something like how Zig works where it passes the I/O object around that encapsulates the required concurrency around the bottlenecks?