I'm sure you've tried all the techniques, from making the calls in separate threads to wrapping them in classes that fire events when the call is complete. All the techniques I've seen use some combination of events, threads and state machine approaches, but all this leads to code that is much more complicated that it need be. Fundamentally, you are just making a sequential series of synchronous calls. In this article I am going to look at how to address this problem in a straightforward way, making your code readable and very maintainable.