Why differences between TaskEvent, Task, and DelegateTask?

I’m working in the Run distribution and comparing using the Spring Events vs. a listener plug-in. In particular, I want to take some actions at various points of time in a process and am planning on dropping messages out to an external message bus.

I’m finding that the TaskEvent object (passed into the Spring Event) has less information than the DelegateTask object (passed into the listener). And even if I then instantiate the TaskService and run a query with the task ID, I still don’t get the same information on the Task object as I can with the DelegateTask that is available in a listener.

Can anyone explain what’s going on and why the differences?