Как реализовать Future как Applicative в Scala?
Предположим, мне нужно выполнить два параллельных вычисления, дождаться их обоих, а затем объединить их результаты. Более конкретно мне нужно запуститьf1: X1 => Y1
а такжеf2: X2 => Y2
одновременно, а затем позвонитеf: (Y1, Y2) => Y
чтобы наконец получить значениеY
.
Я могу создатьбудущие вычисления fut1: X1 => Future[Y1]
а такжеfut2: X2 => Future[Y2]
а затем составить их, чтобы получитьfut: (X1, X2) => Future[Y]
с использованием монадической композиции.
Проблема в том, что монадная композиция подразумеваетпоследовательное ожидание, В нашем случае это означает, что мы сначала ждем одного будущегоа потом мы будем ждать другого. Например. если это займет 2 сек. до первого будущего, чтобы закончить и только 1 сек. во 2-ое будущее, чтобы потерпеть неудачу, мы тратим 1 сек.
Таким образом, похоже, что нам нужноаппликативны состав фьючерсов ждать доили и полное или по крайней мере одно будущее терпит неудачу. Имеет ли это смысл ? Как бы вы реализовали<*>
для фьючерсов?