See also https://bintanvictor.wordpress.com/2013/01/06/every-async-operation-involves-a-sync-call/
Sync call is simple — the output of the actual operation is processed on the same thread, so all the objects on the stack frame are available.
In an async call, the RR fires and forgets. Firing means registration.
The output data is processed …. usually not RR thread. Therefore the host object of the callback and other objects on the RR stack frame are not available.
If one of them is made available to the callback, then the object must be protected from concurrent access.