A comprehensive answer is given at MSDN article "Deciding When to Implement the Event-based Asynchronous Pattern".
The main idea of this article (and short answer to your question) sounds like "Generate the event-based pattern by default, with an option to generate the IAsyncResult pattern"