Будут ли оптимизированы цепочечные обратные вызовы с одинаковым контекстом выполнения при использовании фьючерсов Scala в синхронные вызовы?
Новое Future в Scala 2.10 использует контекст выполнения для каждой операции, в которой действие вызывается асинхронно (включаяmap
filter
, так далее). Означает ли это, что каждое действие всегда будет вызываться индивидуально через контекст выполнения, или возможно, что этот шаг оптимизирован при объединении нескольких преобразований / фильтров, каждый из которых использует один и тот же контекст выполнения?
То есть если делатьf.map(...).filter(...).map(...)
, все с тем же контекстом выполнения, будет ли этот вызовexecute()
один раз (потому что этодостаточно умный, чтобы составить синхронную функцию из вышеперечисленного) или три раза?
Если в будущем Scala не выполняется вышеописанная оптимизация, существует ли альтернативная структура, лучше подходящая для композиций с длинной цепью, которая выполняет вышеуказанные функции?