答案 0 :(得分:11)
左侧的图片并行运行。
说明的一点是,Future.apply
方法是开始执行的方法,所以如果直到第一个未来的结果是flatMap
时才会发生(如图所示)右),然后你没有得到并行执行。
(请注意,通过“踢开”,我的意思是相关的ExecutionContext
被告知工作。它如何并行化是一个不同的问题,可能取决于像它的线程池。)
左边的等效代码:
val numSummer = Future { ... } // execution kicked off
val charConcat = Future { ... } // execution kicked off
numSummer.flatMap { numsum =>
charConcat.map { string =>
(numsum, string)
}
}
和右边:
Future { ... } // execution kicked off
.flatMap { numsum =>
Future { ... } // execution kicked off (Note that this does not happen until
// the first future's result (`numsum`) is available.)
.map { string =>
(numsum, string)
}
}