In MachineState impl you can get away with this simple style of continuations only because you can distinguish complete handlers on their interface. The moment you have to implement two continuations on IAsyncOperationCompletedHandlerIBitmapDecoder for instance you have to implement logic depending on current state i.e. if the callback is reached/invoked on step 2 or on step 15 and so forth other complications.

Keeping these gory details to the compiler is the sane thing to expect so lambdas and capturing context is badly needed for these to feel seamless. Async/await baked into the language would help too.

cheers,
</wqw>