It has to do with capturing errors from the call. I post the call back to the main thread rather than doing stuff directly so that I do not touch the same memory from two different threads at the same time. Wait throws any exceptions or provides any return values from the other thread.
The fc library comes with a cooperatively multitasking scheduler that is entirely lockfree and enables blocking calls that don't actually block the thread, instead wait() allows the calling thread to run other tasks (kicked off by async).