关于利用Kotlin协程实现 异步并发批量处理任务的食用方式

关于kotlin协程在App或者服务端的使用,想必接触过的人可能都清楚。无非就是用 async 或者 withContext 来实现异步协程来处理耗时任务。因此,我们也可以用协程来做一些并发任务。

例如 需求上可能需要我们用协程来 做一个 多线程上传文件的一个功能,要求其中任何一个任务失败,其他后续未完成或未开始的任务都终止掉,那么需要怎么做呢?其实并不复杂

首先,我们要认识有这样的一个东西

coroutineScope{
    val job1=async{ //耗时操作 }
    val job2=async{ //耗时操作 }
    job1.await()
    job2.await()
}

supervisorScope{
    val job1=async{ //耗时操作 }
    val job2=async{ //耗时操作 }
    job1.await()
    job2.await()
}

这是一段非常常见的,在挂起函数中会声明的代码,想必用过 suspend 的都接触过  coroutineScope 与 supervisorScope

这两者的作用都是

将内部包裹起来的协程与调用该挂起函数的协程作用域和生命周期相关联。

这句话什么意思呢?你可以这样理解。当我们这个最外层的协程用 launch 启动的时候,我们绑定了viewModel的 scope,当viewModel被销毁的同时,这些被关联的子协程都会被一并销毁。

那么 coroutineScope 跟 supervisorScope的区别是什么呢?

1.coroutineScope  如果他内部的子协程发生了异常或者被cancel,他会将这个东西告知给他下属所有的子协程,做相同cancel操作

2.supervisorScope 他不关心子协程有没有报错,都不会影响其他子协程

哦吼,看到这里,你是不是已经明白了?

没错,我们就是要利用coroutineScope  的这个特性。

只需要在内部起的子协程中,在合适的地方调用 cancel()方法,就可以实现并发协程,失败时自动取消所有未完成任务这样的一个功能,很简单吧?😁

具体的示例代码这里就没有必要在写了。我相信各位都明白应该怎么做了

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值