Let's say the user need to execute some heavy code (build a report, or extensive calculations etc.). So, of course it needs to be asynchronous, and we possibly need to store some data about execution status. How?
If it's not user action, but periodic action, Task Manager could be used (RunLegacyTask or Custom task).
If it's an often encountered workflow, then it's Ensemble.
But what about Caché?