У меня есть список возможных значений ввода
val inputValues = List(1,2,3,4,5)
У меня есть очень длинная функция вычисления, которая дает мне результат
def reallyLongFunction( input: Int ) : Option[String] = { ..... }
Используя scala параллельные коллекции, я легко могу сделать
inputValues.par.map( reallyLongFunction( _ ) )
Чтобы получить все результаты, параллельно. Проблема в том, что я действительно не хочу всех результатов, мне нужен только результат FIRST. Как только один из моих вкладов будет успешным, я хочу получить свой результат и хочу продолжить свою жизнь. Это сделало много дополнительной работы.
Итак, как мне получить лучшее из обоих миров? Я хочу
- Получить первый результат, который возвращает что-то из моей длинной функции
- Остановите все мои другие потоки от бесполезной работы.
Изменить - Я решил это как немой программист java, имея
@volatile var done = false;
который установлен и проверен внутри моего reallyLongFunction
. Это работает, но не очень сильно scala. Хотелось бы лучше сделать это....