DispatchToMainThreadAndWait
In some cases, `lock.wait()` can be interrupted by spurious wake-ups before processing is done. To ensure things are, in fact, synchronous, loop over `wait()` until it is actually done.