我想使用WorkManager设置以下工作:
A
|
v
-----
| |
v |
B v
| D
v |
C |
| |
-----
|
v
E
因此,首先应该运行A
,然后运行B
,然后是C
,而D
并行运行。之后,E
应该运行。
E
可以在运行WorkContinuation.combine()
之前加入两个平行链。我的问题是,我无法弄清楚在A
之后如何将叉子分叉成两个平行的链。 (如果包含B
和C
的左链不是两个请求的实际链,而是一个请求,则很简单。)
正如您所写,要构建的链无法通过WorkManager实施。您可以在WorkManager's issuetracker上打开功能请求。
回到您的链,我想知道是否可以对其进行修改以适合WorkManager API:
A
|
v
-----
| |
v |
B v
| D
| |
-----
|
v
C
|
v
E
在这种情况下,您需要以某种逻辑处理将输入合并到C
中的操作,以使其达到预期的效果,如果在Worker
类之间传递了数据,则此操作。但是您保持相同的约束(但是在这种情况下C
要求您在启动D
之前先终止它。)>
在这种情况下,在WorkManager's documentation之后,您可以看到类似的内容:
val workRequestA = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestB = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestC = OneTimeWorkRequestBuilder<SaveImageToFileWorker>()
.setInputMerger(ArrayCreatingInputMerger::class.java)
.build()
val workRequestD = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
val workRequestE = OneTimeWorkRequestBuilder<SaveImageToFileWorker>().build()
var continution = workManager
.beginWith(workRequestA)
.then(listOf(workRequestB, workRequestD))
.then(workRequestC)
.then(workRequestE)
.enqueue()