Reduces compile time on a 4-core ARM Rpi5 from 1m12s wallclock (i.e: "real") time to 0m55s; and from 4m+ "user" time to 3m8s.
This class encapsulates all the logic and operations required to correctly bridge an async operation into a sync function. In particular, it also makes it less easy to forget to check if the io_service exited because it was stop()ped.