Как связать новую работу с уже поставленной в очередь работой с WorkManager? - PullRequest
0 голосов
/ 08 февраля 2019

Допустим, у нас есть два рабочих: WorkerA и WorkerB.Теперь WorkerB не может быть запущено до завершения Worker.Обычно мы объединяем этих двух рабочих:

WorkManager.getInstance()
    .beginWith(workA)
    .then(workB)
    .enqueue()

Но проблема в том, что мы не знаем точного момента, когда мы можем начать WorkerB (мы только то, что он должен ждать WorkerA),

На самом деле есть два случая:

  1. Мы хотим начать WorkerB, когда WorkerA начался, но еще не закончен.
  2. Мы хотимначало WorkerB после того, как WorkerA закончилось.

В идеальном мире WorkManager может предпочесть дождаться какой-либо работы или привязаться к уже существующей работе.

Я думал о том, чтобы начать WorkerB с WorkerA до того, как он закончит выполнять работу, но я не уверен, является ли доступ к WorkManager с работы до возвращения Result хорошей практикой.

1 Ответ

0 голосов
/ 09 февраля 2019

Когда вы создаете цепочку работы, WorkerB запускается только после успешного завершения WorkerA.Если WorkerA завершится неудачно, WorkerB также будет помечен как сбой.

Если вы хотите запустить WorkerB при запуске WorkerA, вы можете просто поставить WorkerB в WorkerAdoWork() метод.Пожалуйста, имейте в виду, что оба Рабочих в этот момент разделены.

...