Сопрограмма котлин - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь понять сопрограммы на Kotlin, и у меня есть несколько вопросов по этой теме.

Эти задания создаются из цикла foreach внутри ScheduledService, который извлекает задачи, и каждая задача запускает задание сопрограммы таким образом

fun executeUploadJob(transporter: Transporter, taskId: Long) {
    GlobalScope.launch {
        exportTaskRepository.findById(taskId).ifPresent { task ->
            task.status = TaskStatus.IN_PROGRESS
            exportTaskRepository.save(task)
        }
        transporter.executeSingleFilesTransportCycle()
    }.invokeOnCompletion {
        when (it) {
            null -> {
                exportTaskRepository.findById(taskId).ifPresent { task ->
                    task.status = TaskStatus.UPLOADED
                    task.lastUpdated = Timestamp(System.currentTimeMillis())
                    exportTaskRepository.save(task)
                }
            }
            //means that job was cancelled from outside and it should not be counted as error
            is CancellationException -> {
                logger.warn("Job was cancelled..[Task Id - $taskId]", it)
                exportTaskRepository.findById(taskId).ifPresent { task ->
                    task.lastUpdated = Timestamp(System.currentTimeMillis())
                    task.nextAttempt = Timestamp(System.currentTimeMillis() + THIRTY_MINUTES)
                    task.status = TaskStatus.WAITING
                    exportTaskRepository.save(task)
                }
            }
            else -> {
                logger.error("Error while uploading file [TaskId - $taskId]", it)
                exportTaskRepository.findById(taskId).ifPresent { task ->
                    task.lastUpdated = Timestamp(System.currentTimeMillis())
                    task.nextAttempt = Timestamp(System.currentTimeMillis() + THIRTY_MINUTES)
                    task.status = TaskStatus.WAITING
                    exportTaskRepository.save(task)
                }
            }
        }
    }
}

Мой вопрос: 1) Если возникнут какие-либо исключения, будет ли текущая сопрограмма существовать в JVM, или она исчезнет, ​​и не будет утечек памяти, а также ссылок на Job? 2) Правильно ли сохранять где-либо ссылки на задания, чтобы периодически отслеживать их состояние?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...