There are no callbacks in io_uring. You submit an operation (SQE), the kernel runs your request while you're doing other stuff, eventually you get back a completion entry (CQE) with the results of the operation.
Asynchronous execution is: do this operation, then wait until finish event occurs.
They are opposites.
The client decides when to look at the ring buffer