You can't cancel the delayed block execution (without writing some additional wrapper code). With a timer you just invalidate.
The block retains it's contents so you need to actively think about that and (potentially) write extra code to deal with it.