将可能失败的任务(executeDownload())包在一个循环体中,

循环体有一个finished标记,标记为true时停止
当任务失败时抛出 RetryXXX 异常(RetryXXX 异常为自定义的异常)

此时finished标记仍然为false,
然后到finally中取消原先的任务,那么就会到下次循环体,再次尝试执行任务….
如此循环,直到任务确认执行完毕不再抛出RetryXXX 异常。

如此,便能够确保可能失败的任务一定执行成功。