Android 通过kotlin协程中断HttpURLConnection

Android 通过kotlin协程中断HttpURLConnection,android,kotlin,httpurlconnection,kotlin-coroutines,Android,Kotlin,Httpurlconnection,Kotlin Coroutines,我正在尝试将HttpURLConnection与Kotlin协同程序一起使用,如下所示 var downloadJob: Job? = null fun triggerDownload() { job = downloadFile() } override fun onBackPressed() { downloadJob.cancel() super.onBackPressed() } fun downloadFile() = launch { with

我正在尝试将HttpURLConnection与Kotlin协同程序一起使用,如下所示

var downloadJob: Job? = null

fun triggerDownload() { 
    job = downloadFile()
}

override fun onBackPressed() {
    downloadJob.cancel()
    super.onBackPressed()
}

fun downloadFile() = launch {
    withContext(Dispatchers.IO) {
        var connnection: HttpURLConnection? = null
        try {
            connnection = url.openConnection() as HttpURLConnection
            connnection.connect()
            //do the work
        } catch (e: Exception) {
            //handle exception
        } finally {
            connnection?.disconnect()
        }
    }
}
取消作业时,预期会引发CancellationException,但由于某种原因,在建立连接时不会发生这种情况。
是否有办法通过取消作业来中断连接尝试?

如文档所述。这意味着协同程序代码有责任检查取消并抛出异常。coroutine库中的所有挂起函数都是可取消的(即,它们检查是否取消),因此通常它会自动工作。显然,
HttpURLConnection
的情况并非如此-它不知道任何关于协同路由的信息,并且显然不检查取消。而且据我所知,这个电话根本不能取消。您可能需要考虑使用类库,并编写自己的可取消的协同程序适配器,或者寻找一个库来支持框中的协程序。