Динамически цепочка один ко многим объектам `OneTimeWorkRequest`
Есть много способов цепочки WorkRequest
объекты. Параллельно, последовательно и даже объединяя несколько работ.
Несмотря на то, что этот API кажется очень гибким, я не смог найти способ решить следующую задачу:
Первый Worker
отвечает за сбор информации, в конце своего выполнения выводит список имен файлов, которыми следует манипулировать. После этого я хотел бы сделать манипуляции с каждым из этих файлов. Так что я представляю Worker
это ответственно за манипулирование одним файлом. Но я не мог найти способ передать вывод каждого имени файла с первого Worker
на несколько манипулятор Worker
объекты. (Должен быть один манипулятор WorkRequest
для каждого из файлов, и они WorkRequest
объекты должны работать параллельно).
Как можно WorkRequest
создать динамическое число WorkRequest
объекты на основе его вывода?
1 ответ
Я не знаю ни одного способа поставить в очередь динамическое число WorkRequest. Идея состоит в том, что вы создаете цепочку WorkRequests, которая является фиксированной и может обрабатываться WorkManager в целом (если каждый работник добивается успеха).
Для этого конкретного случая я, вероятно, попытаюсь создать необходимое количество рабочих запросов (по одному на файл), когда начальный рабочий запрос будет успешным.
Вы можете поставить больше работы изнутри Worker
, Так что в конце первого Worker
Вы можете поставить в очередь других рабочих в зависимости от файлов, которые вы хотите обработать. Вы также можете посмотреть на enqueueUniqueWork()
а также ExistingWorkPolicy.APPEND
если вы хотите присоединиться к цепочке уникальных работ.