kotlin 下载多个文件并超时

whlutmcx  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(187)

我正在开发一个应用程序,其中自定义字体在应用程序启动时下载(根据客户端要求,我们必须在运行时执行此操作)。如果下载时间超过某个限制(例如5秒),我希望给予下载并退回到默认字体。我如何使用Kotlin实现这一点?
我的下载代码:

fun download(url: String, path: String) {
    URL(url).openStream().use { input ->
        FileOutputStream(File(path)).use { output ->
            input.copyTo(output)
        }
    }
}

并行下载的代码(AppFont是一个自定义数据模型,包含urlpath字段):

appFonts.map {
        async { download(it.url, it.path) }
    }.awaitAll()

我尝试使用withTimeoutwithTimeoutOrNull,但它们在这种情况下似乎不起作用...
非常感谢!

b4lqfgs4

b4lqfgs41#

我想我可能已经找到了一种方法,通过设置超时并捕获任何超时异常:

fun download(url: String, path: String, timeout: Int? = null) {
    URL(url).openConnection().apply {
        timeout?.let {
            connectTimeout = it
            readTimeout = it
        }
    }.getInputStream().use { input ->
        FileOutputStream(File(path)).use { output ->
            input.copyTo(output)
        }
    }
}

相关问题