Thanks for asking, because it made me go back and look at it again with a fresh set of eyes (I looked at it *a lot* on Friday).  Turns out, where I thought I was seeing hangs because of deadlocks in synchronous dispatching to the main queue, it was actually because your app can hang if you dispatch to the main thread while on the main thread, which I wasn't checking.

I'll have an update posted shortly, that's less onerous.