Off topic, but when talking about evented/continuation based systems, I'm surprised the c# approach with the async/await keywords isn't brought up more often. For those unfamiliar, those rather confusingly named keywords make the program compile down to a continuation passing style, while still letting the source look synchronous. Makes the code _much_ easier to handle.