Невозможно остановить CoroutineWorker при сбое условия

#android #kotlin #kotlin-coroutines #android-workmanager

#Android #kotlin #kotlin-сопрограммы #android-workmanager

Вопрос:

Я использую CoroutineWorker для фоновой задачи. Вот фрагмент кода

 class SimpleWorker(context: Context) : CoroutineWorker(context, workerParams) {
     override suspend fun doWork(): Result = coroutineScope{
         //obtain settings info saved as local file
         val settingsInfo = obtainSettings(context) 

         if(null == settingsInfo) {
            Result.failure()
         }

         Log.i(TAG, "Valid settings found, proceed")
         val isUploadEnabled = settingsInfo.isUploadEnabled //error when settingInfo is null
      }
}
  

В случае нулевых настроек я бы ожидал, что рабочий отправит сигналы сбоя и прекратит выполнение остальной части кода. Вместо этого он продолжается и разбивается дальше. Result.failure() Не выполняет то, что он должен делать, или я что-то пропустил?

Ответ №1:

Вы должны фактически вызвать return Result.failure() объект:

 if(null == settingsInfo) {
    return@coroutineScope Result.failure()
}
  

В противном случае вы просто создаете Result.failure() объект и ничего с ним не делаете.