calling cancel when already cancelled or finished should just return