Were you thinking something along those lines - 29c4a70a47d6e9c9cc42a48c8e38705f96c43e43?

I do agree that splitting it out and using async makes it more readable.