When to use throw/catch events and send/receive tasks