使用挂起函数来封装回调

graph LR
lifecycleScope-->|destory时通知|协程被取消
subgraph 协程挂起时,也就是异步任务执行时,需要考虑双向通知
协程被取消-->|cont.invokeOnCancellation通知|取消异步任务
异步任务被取消或异常-->|通知|取消协程/通知协程异常
end

参考

在 View 上使用挂起函数