[英]Download multiple files with timeout
我正在開發一個應用程序,其中自定義 fonts 在應用程序啟動時下載(根據客戶要求,我們必須在運行時執行此操作)。 如果下載時間超過一定限制(例如 5 秒),我想放棄下載並回退到默認值 fonts。 如何使用 Kotlin 實現此目的?
我的下載代碼:
fun download(url: String, path: String) {
URL(url).openStream().use { input ->
FileOutputStream(File(path)).use { output ->
input.copyTo(output)
}
}
}
我的並行下載代碼( AppFont
是自定義數據 model 和url
和path
字段):
appFonts.map {
async { download(it.url, it.path) }
}.awaitAll()
我嘗試使用withTimeout
和withTimeoutOrNull
但在這種情況下它們似乎不起作用......
太感謝了!
我想我可能已經通過設置超時並捕獲任何超時異常找到了一種方法:
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)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.