We are working through the last bits of the Bashing Game, and this gave rise to another feature: timer cancellation.
Short story: you may be in a situation where you are doing other "stuff" while the timer is active, and now you're "done" but the timer is still running, and you still want the TimerCallback to occur.
In the current scheme, this is problematic; you must hold a reference to TimerService in order to call its cancel method. Since a major design goal is to not have to do that, we took care of it.
The current TimerService.cancel is now called TimerService.unregister which now acts as the dual of TimerService.register, and everywhere that called the first one, now calls the second one, e.g in Pipelines.
There is a new implementation of TimerService.cancel that handles the cancellation portion, and does so in such a way that you get to receive one final TimerCallback with last==true and elapsed is whatever partial time at that point, and should be less-than the duration.
The final piece of this feature is a new interface TimerCancel and a method TimerConfig.obtainToken to get one to hold onto. This makes it pretty simple.