Если вы хотите создать синхронную работу, вам нужно использовать класс CountDownLatch (в вашем коде есть комментарий).
CountDownLatch - это объект синхронизации, который можно использовать в подобных случаях.
На данный момент не существует допустимого метода для синхронизации работников.
Прослушиваемые работники полезны, когда вы хотите отслеживать самого работника из своего приложения, используя Livedata, которые возвращают полезную информацию (например, статус).
Если я правильно помню, стандартный класс Worker также происходит от Listenable worker, поэтому вы можете использовать его.
В вашем случае полезно иметь двух рабочих: первый применяет команду FFMPEG, а второй - принимает выходные данные этой команды для загрузки по сети. Разделение этих двух операций позволяет вам иметь больше времени для выполнения двух работ (10 + 10).
В вашем случае вы можете сделать что-то подобное для первого работника:
private final CountDownLatch syncLatch = new CountDownLatch(1);
...ctor
doWork(){
//your asyncronous call
...
@Override
public void onFinish() {
//you need to save error status into a onSuccess and onFailure
syncLatch.countDown();
}
...
//end
syncLatch.await();
...
//evaluate if there are errors
...
//create output to pass to the next worker
Data outputData = ...
//pass the result to second worker, remember that onfailure will stop all subsequent workers
if(error==true)
{
return Result.failure(outputData);
}else{
return Result.success(outputData);
}
}
Для второго работника вы можете сделать то же самое в соответствии с вашей функцией загрузки, чтобы синхронизировать вызов.
Надеюсь, эта помощь.
Приветствие.