Как дождаться результатов задач Google Play Services с тайм-аутом? - PullRequest
0 голосов
/ 01 июля 2019

Большинство вызовов удаленных функций Служб Google Play возвращают Task, который будет завершен в будущем.У меня есть несколько задач, которые я хочу подождать, но не дольше определенного времени ожидания.

Существует Tasks.await(), который будет ожидать одну задачу с тайм-аутом, это заблокирует вызывающий поток.Есть ли что-то, что доступно или может быть создано в строке:

waitWithTimeout(2, TimeUnit.SECONDS, task1, task2) { results: List<Task> ->
    // we will be here if both tasks are completed 
    // or when 2 seconds is up, whichever is earlier
}

1 Ответ

0 голосов
/ 03 июля 2019

https://developers.google.com/android/reference/com/google/android/gms/tasks/Tasks

публичная статическая задача >> whenAllComplete (задача ... задачи)

Возвращает задачу со списком задач, которая успешно завершается после завершения всех указанных задач. Эта задача всегда будет успешной, даже если любая из предоставленных задач не будет выполнена или отменена. Не принимает нули.

Выдает

NullPointerException

если какая-либо из предоставленных Задач пуста

публичная статическая задача >> whenAllComplete (коллекция> задач)

Возвращает задачу со списком задач, которая успешно завершается после завершения всех указанных задач. Эта задача всегда будет успешной, даже если любая из предоставленных задач не будет выполнена или отменена. Не принимает нули.

Ниже показано, как это реализовано в примере:

Гарантирует ли Tasks.whenAllSuccess порядок, в котором я передаю ему задания?

  1. Создание объекта списка для отслеживания выполненных отдельных задач

  2. Реализация отдельных задач как отменяемых задач с завершением слушатель, который добавляет завершенные в список, созданный на шаге https://developers.google.com/android/reference/com/google/firebase/storage/CancellableTask.

  3. Затем запустите таймер на x секунд.

  4. Затем реализуйте прослушиватель whenallcomplete.

  5. Если завершающий слушатель завершает работу до таймера, отмените таймер и продолжить.

  6. В противном случае, если таймер закончится первым, отмените оставшиеся задачи, если это необходимо, и перейдите к завершенному объекту списка в шаге 1.

...