There are different ways to offload long-running processes to asynchronous apex: we got future calls, scheduled Apex, batch Apex and, more recently, Queueable Apex.
They are all good to launch "fire and forget" methods: they all have a return type of void.
Is there any other asynchronous mechanism where we can offload some work to an asynchronous method, then wait until it finishes to continue processing? I would like to avoid callbacks, but rather sleep one thread until the asynchronous processing has finished.
Or is that something that has been deliberately disabled by Salesforce to avoid running out of threads?