I hit a snag with the doMethodLater approach. In the scenario where “stop” is called on a sound - finished event does not fire. With the do later approach - it always fires.
Problem was, using OpenAL, I could use setFinishedEvent. Now, when I did that, it worked well because the event would only actually fire if the sound finished playing and did not fire when stop was called. That is the behaviour I wanted but was forced to move to FMOD. FMOD does not support “setFinishedEvent” so I simply added a task to monitor the sound and fire an event on finish.