You can create a HumanTask like a parallel branch for each timer. Then user will complete the HumanTask, and process will moved to next node immediately.
Thanks Bob, that does seem to make the most sense. So in the previous example:
start -> [sendEmail] -> [3-day timer] -> [send 2nd email] -> [3-day timer] -> [send final email] -> [3-day timer] -> end
|event| |event| |event|
[newServiceTask] -> [x-day timer] -> [etc..]
Anytime the event gets triggered while in the timer states, they would know to proceed through to [newServiceTask] rather than continuing on the previous node path.
I'll give this a shot & report back, thanks!
I wound up using a diverging eventBasedGateway.
Two nodes extend from the eventBasedGateway, the first is a timer, the second is an event. Whichever occurs first invalidates the other path, and execution continues from that node onwards.