Qual é a maneira correta de usar as extensões da Anko Coroutines?

Portanto, estou migrando um aplicativo de exemplo do RxJava para o Kotlin / Anko Corountines e estou pensando se estou fazendo a melhor (primeira) abordagem:

fun getPopulationList() {
    val ref = asReference()

    async(UI) {
        try {
            ref().setCurrentState(ViewState.State.LOADING)
            val background = bg {
                repository.populationResponse().execute().body()
            }

            ref().let {
                it.response = background.await()
                it.mvpView?.onGetData(it.response)
                it.setCurrentState(ViewState.State.FINISH)
            }
        } catch (e: Exception) {
            e.printStackTrace()
            ref().mvpView?.onError(e)
        }
    }
}

Estou usando uma arquitetura MVP em que meuPresenter classe base tinha umCompositeSubscription E noonDestroyfragmento ou método de atividade simples cancele a inscrição e limpe aCompositeSubscription objeto. Mas eu estou querendo saber se oasReference() A função da Anko Coroutines faz o mesmo e não é necessário salvar uma lista deDeferred<T> e itere-o e cancele um por um.

Aliás, se eu adicionar umThread.sleep(5000) para simular uma grande transação e destruir o fragmento, vejo no logcat a resposta HTTP mesmo depois que o fragmento não é visível / destruído enquanto o RxJava não acontece, então acho que não estou usando corretamente.

ATUALIZAR

 fun getPopulationList() {
    val ref = asReference()

    job = launch(UI) {

        try {
            ref().setCurrentState(ViewState.LOADING)
            val background = bg {
                Thread.sleep(5000) //simulate heavy IO

                if (isActive) {
                    repository.populationResponse().execute().body()
                } else {
                    return@bg null
                }
            }

            ref().let {
                it.response = background.await()
                it.mvpView?.onGetData(it.response)
                it.setCurrentState(ViewState.FINISH)
            }
        } catch (e: Exception) {
            RestHttpExceptionHandler().handle(UI, e, ref())
        }
    }
}

Consigo cancelar a corotina enquanto ligojob.cancel() noonDestroy() método, mas para fazê-lo funcionar, tenho que verificar se o trabalho está ativo ou não e se isso se traduz em dados if / else e return ou not. Existe alguma maneira melhor de devolver algo quando o trabalho foi cancelado?

questionAnswers(1)

yourAnswerToTheQuestion