Events are the first place you are likely to meet asynchronous functions, but once you have events and an event dispatching system you can't stop there. Any long running function has to be implemented ...