Android WorkManager将单个链分叉为多个链并连接

Android WorkManager将单个链分叉为多个链并连接,android,android-workmanager,Android,Android Workmanager,我想使用WorkManager设置以下工作: A | v ----- | | v | B v | D v | C | | | ----- | v E 因此,首先,A应该运行,然后是B,然后是C,而D应该并行运行。之后,E应该运行 运行E之前连接两个平行链可以使用WorkContinuation.combine()完成。我的问题是,我不知道如何在A之后分叉成两条平行链。(如果包含B和C的左链不是由两个

我想使用WorkManager设置以下工作:

   A
   |
   v
 -----
|     |
v     |
B     v
|     D
v     |
C     |
|     |
 -----
   |
   v
   E
因此,首先,
A
应该运行,然后是
B
,然后是
C
,而
D
应该并行运行。之后,
E
应该运行


运行
E
之前连接两个平行链可以使用
WorkContinuation.combine()
完成。我的问题是,我不知道如何在
A
之后分叉成两条平行链。(如果包含
B
C
的左链不是由两个请求组成的实际链,而只是一个请求,这将很简单。)

如您所述,您想要构建的链不可能通过WorkManager实现。您可以在上打开功能请求

回到您的链,我想知道是否可以修改它以适应WorkManager API:

   A
   |
   v
 -----
|     |
v     |
B     v
|     D
|     |
 -----
   |
   v
   C
   |
   v
   E
在这种情况下,您需要使用一些逻辑来处理输入合并到
C
中,以便它实现您所期望的,如果您在
工作者
之间传递了数据。但您保持相同的约束(但在本例中,
C
要求您在启动前终止
D

在本例中,您可以使用以下内容:

        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()
val workRequestA=OneTimeWorkRequestBuilder().build()
val workRequestB=OneTimeWorkRequestBuilder().build()
val workRequestC=OneTimeWorkRequestBuilder()
.setInputMerge(ArrayCreatingInputMerge::class.java)
.build()
val workRequestD=OneTimeWorkRequestBuilder().build()
val workRequestE=OneTimeWorkRequestBuilder().build()
var continuation=workManager
.beginWith(工作请求A)
。然后(列表(工作请求B、工作请求D))
.然后(工作请求c)
。然后(工作请求)
.enqueue()

谢谢@pfmaggi!很高兴知道我的要求目前是不可能的。还感谢您提出的解决方案,它启发了我以下解决方案:在我的情况下,运行时间较长的工作是
C
。因此,我将把
C
D
并行化,并在
A
之后单独使用
B