Сalling `dispatch_source_set_timer` in any time before timer firing cancels previous scheduling and sets new one. I used this implementation in my app and it works exactly as expected and as NSTimer does. I can write some tests if you are generally interested in this API for MSWeakTimer.
`dispath_after` is not an option because timer can fire at any time during this 0.5sec or later, but I need exactly `0.5; 5.5; 10.5 ...` fire times.