fun testTimeout(timeMillis:Long,sleepTime :Long){
    val scope = MainScope()
    val ceh = CoroutineExceptionHandler { _, throwable ->
        when(throwable){
            is CancellationException ->{
                Log.e("testTimeout"," CancellationException ")
            }
            else -> {
                Log.e("testTimeout","throwable${throwable.message}")
            }
        }
    }
    scope.launch(ceh) {
        withContext(Dispatchers.IO){
            val s = withTimeoutOrNull(timeMillis){
                return@withTimeoutOrNull suspendCancellableCoroutine<Boolean> {continuation ->
                    Log.e("suspendCancellableCoroutine"," 1 ")
                    SystemClock.sleep(sleepTime)
                    if (continuation.isActive)
                        continuation.resume(true)
                    else
                        continuation.cancel()
                    Log.e("suspendCancellableCoroutine"," 2 ")
                }
            }
            when(s){
                null ->{
                    Log.e(MainActivity.TAG,"超时了!")
                }
                true ->{Log.e(MainActivity.TAG,"没超时 true")}
                else ->{Log.e(MainActivity.TAG,"超时? else ")}
            }
        }
    }
}
协程-超时
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 什么是协程?项目中的需求特别是复杂的需求并不是单一任务的,可能是一个接一个任务组成的,特别是下一个任务需要上一个任...
- 目录 kotlin之协程(一),线程,进程,协程,协程可以替换线程吗?[https://www.jianshu.c...
- 协程一:Kotlin 协程 (一)[https://mp.weixin.qq.com/s?__biz=Mzg3NT...