Задача Monix firstCompletedOf, которая также игнорирует ошибки
У меня есть случай использования, когда мне нужно сделать запрос к каждому серверу, однако меня интересует только первый успешный результат (и я хочу игнорировать любые возможные исключения). Я пытаюсь использовать Monix 2.x для выполнения этой задачи, и я смоделировал сценарий ниже
val exceptionTask = Task.delay(1 second, Task.raiseError[String](new Exception()))
val secondExceptionTask = Task.delay(1.1 seconds, Task.raiseError[String](new Exception()))
val successfulTask = Task.delay(1.2 seconds, Task.pure("success"))
val successfulTask2 = Task.delay(1.4 seconds, Task.pure("slower success"))
val tasks = List(exceptionTask, secondExceptionTask, successfulTask, successfulTask2)
// Need to get successfulTask as a result and the task should complete in 1.2 seconds, i.e. it should ignore and cancel successfulTask2
Monix предоставляет метод под названием Task.firstCompletedOf
Однако, если одна из ваших задач содержит исключение, Task.firstCompletedOf
также будет просто исключением. Если я использую .materialize
метод (чтобы превратить исключения в значения), затем Task.firstCompletedOf
просто вернусь exceptionTask
в результате.
В основном мне нужно сделать эквивалент того, что .collect
находится в коллекциях Scala, т.е. мне нужно отфильтровать все задачи исключений (в данном случае заботятся только об успешных значениях) "success"
а также "slower success"
), а затем запустить Task.firstCompletedOf
на этом в результате .collect
У кого-нибудь есть идеи как это сделать?