Если вы используете дооснащение для своих сетевых вызовов, вы можете добавить их адаптер вызова сопрограмм из здесь .
Вы отменяете работающую часть сопрограммы, отменяя ее работу.Например, если вы используете launch
для запуска сопрограммы, он возвращает объект Job
, который можно отменить.
val job = launch {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
}
delay(1300L) // delay a bit
println("main: I'm tired of waiting!")
job.cancel() // cancels the job
job.join() // waits for job's completion
println("main: Now I can quit.")
Если вы не используете модификацию и не используете другую библиотеку, вы можете получить isActive
внутри вашей сопрограммы и отмените запрос из вашей библиотеки.
fun main(args: Array<String>) = runBlocking<Unit> {
val startTime = System.currentTimeMillis()
val job = launch {
var nextPrintTime = startTime
var i = 0
while (isActive) { // cancellable computation loop
// print a message twice a second
if (System.currentTimeMillis() >= nextPrintTime) {
println("I'm sleeping ${i++} ...")
nextPrintTime += 500L
}
}
}
delay(1300L) // delay a bit
println("main: I'm tired of waiting!")
job.cancelAndJoin() // cancels the job and waits for its completion
println("main: Now I can quit.")
}