Unfortunately it's a limitation of asynchronous method implementation in C#/.NET.  John and I have had a few discussions about the best way to handle this overall.  Until then, yes, it's the same code twice.