Ради аргумента, допустим, я реализую Future
для задачи, которая не отменяется. Java 6 API doc говорит:Несоответствие в java.util.concurrent.Future?
После [
cancel()
] возвраты, последующие вызовыisDone()
всегда будут возвращатьtrue
.[
cancel()
] возвращаетfalse
, если задача не может быть отменено, как правило, потому, что она уже завершена нормально
Он также говорит:
[
isDone()
] возвращаетtrue
, если эта задача была выполнена.
Но что делать, если моя отмена не выполняется, потому что задача уже завершена, а потому, что ее просто нельзя отменить? Есть ли выход из этого противоречия (за исключением того, что моя несостоятельная задача отменяется и обходит ее вообще)?
Вы пропустили квалификацию «завершена»: «Завершение может быть вызвано обычным завершением, исключением или отменой - во всех этих случаях этот метод вернет true. ' –
Это также относится к цитированию' Future.cancel (boolean) ': * Эта попытка потерпит неудачу, если задача уже завершена, уже отменена или не может быть отменена ** по какой-то другой причине **. * Таким образом, это кажется законным, чтобы не отменить по какой-либо причине вы хотите. –