В чем разница между "Future.successful(None)" и "Future (None)"
Future.apply запускает асинхронное вычисление, тогда как Future.successful создает уже завершенное Будущее с указанным результатом.
Теперь Future(None) (Future.apply(None)) менее эффективен, чем Future.successful(None)?
Ответ 1
Future.apply(None) создает асинхронное вычисление и выполняет его. Это означает, что создается дополнительный лямбда-объект и запланирована дополнительная задача (однако, тривиальная задача).
Future.successful(None) просто производит уже завершенное будущее. Это более эффективно.
Ответ 2
Я не думаю, что Future(None) дает большие накладные расходы, но при этом по умолчанию реализация каждого вызова apply порождает новую задачу для пула потоков ForkJoin, тогда как Future.successful(None) завершается немедленно. И каждый вызов map или flatMap в будущем создает новую задачу для опроса, что также дает некоторые накладные расходы, поэтому вы можете взглянуть на реализацию scalaz Future/Task, которая более тщательно обрабатывает такие детали.