bennyhuo / Bennyhuo

bennyhuo.vercel.app
8 stars 3 forks source link

破解 Kotlin 协程(5) - 协程取消篇 | Bennyhuo #19

Open bennyhuo opened 5 years ago

bennyhuo commented 5 years ago

https://www.bennyhuo.com/2019/04/30/coroutine-cancellation/

协程的任务的取消需要靠协程内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。

XuQK commented 4 years ago

大佬,请问我用retrofit做网络请求,用的您文章末尾提供的库,为啥在okhttp的拦截器里抛异常,不能在调用await方法的地方捕获呢,抛个异常直接导致app崩溃了。

bennyhuo commented 4 years ago

@XuQK 大佬,请问我用retrofit做网络请求,用的您文章末尾提供的库,为啥在okhttp的拦截器里抛异常,不能在调用await方法的地方捕获呢,抛个异常直接导致app崩溃了。

先确定这个异常是否会在 CallBack 的回调中回调,如果不能,那么 await 肯定是无法捕获的,因为这个异常没有传出来。具体问题还要具体分析

XuQK commented 4 years ago

@enbandari

@XuQK 大佬,请问我用retrofit做网络请求,用的您文章末尾提供的库,为啥在okhttp的拦截器里抛异常,不能在调用await方法的地方捕获呢,抛个异常直接导致app崩溃了。

先确定这个异常是否会在 CallBack 的回调中回调,如果不能,那么 await 肯定是无法捕获的,因为这个异常没有传出来。具体问题还要具体分析

功力不够,追踪不了,先搁着吧,感谢大佬(っ.❛ ᴗ ❛.)っ

CoenQian commented 2 years ago

看到第二段的时候我就在想,为什么 Job 取消的时候 delay 会抛出 CancellationException 异常,如果我自己写挂起函数,怎么才能在 Job 取消的时候释放资源,就去看了一下 delay 如何实现的,正好把 suspendCancellableCoroutineCancellableContinuation 的源码看了一下,第二天接着看的时候正好就看到第三节在讲这个了,后面看的就很顺利了,行云流水 💪