Should this be synchronous? It's called on a worker thread, so it's probably ok to block, and would make things a lot easier to follow.