Если invokeAny()
обещает, что при возврате invokeAny()
никакие задачи еще не выполняются, это будет иметь место: все побочные эффекты видны.
Чтобы invokeAny()
знал, что все задачи выполнены, он должен быть синхронизирован с этими потоками, что означает, что возврат функций происходит после завершения задач (и всего, что происходит в задаче),Однако API ExecutorSerive и Future.cancel () явно не говорит, что происходит, когда вы отменяете запущенную задачу (в частности: cancel()
будет ждать с возвратом, пока задачи не перестанут выполняться. Тот факт, что после вызоваcancel()
, isDone()
должен возвращать true, подразумевает, что cancel()
не вернется, пока задача фактически не завершится.
Еще одна вещь, на которую следует обратить внимание, это то, что вы не будете знать, если задачакогда-либо началось выполнение при использовании invokeAny()
без проверки объектов Future
.