美文网首页
异步任务的极简处理

异步任务的极简处理

作者: 小鱼爱记录 | 来源:发表于2019-02-23 19:22 被阅读22次

使用示例

var req = UserPublic.LoginReq.newBuilder().setEmail(email).setPassword(password).build()
val method = UserGrpc.newBlockingStub(MockConfig.channel)::login
asyncTask(req, method) {
    showUserInfo(it)
}

实现机制:泛型方法+高阶函数

fun <Req, Resp> asyncTask(req: Req, function: (Req) -> Resp?, errorHandler: (Throwable) -> Any = SystemConfig.defaultErrorHandler, consumer: (Resp?) -> Any) {
    val errorHandler = CoroutineExceptionHandler { _, exception ->
        errorHandler.invoke(exception)
    }
    launch(errorHandler) {
        var resp = async(Dispatchers.IO) {
            function.invoke(req)
        }.await()
        consumer.invoke(resp)
    }
}

它有默认的错误处理,也可以自定义错误处理,默认的话,只是打印一下错误,可以自己重写errorHandler参数

class SystemConfig {
    companion object {
        val defaultErrorHandler: (Throwable) -> Any = { exception ->
            {
                LogUtils.print("Caught $exception")
            }
        }
    }
}

优点

  1. 将业务代码和模板代码分离,就算以后不用协程了,也可以很方便的切换成其它线程调度框架
  2. 方便后期拓展,现在的模板代码只是做了线程切换,以后可以加上加载进度条的显示和隐藏等等

相关文章

  • 异步任务的极简处理

    使用示例 实现机制:泛型方法+高阶函数 它有默认的错误处理,也可以自定义错误处理,默认的话,只是打印一下错误,可以...

  • 第七周随笔--网络请求

    需要异步处理,所以构造一个异步处理的类//异步任务处理class RequestNetworkDataTask e...

  • flutter之---Future的正确用法

    在flutter中经常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future...

  • flutter Future

    在flutter中经常会用到异步任务,dart中异步任务异步处理是用Future来处理,那么如何实现用Future...

  • sidekiq

    Sidekiq in Railssidekiq异步处理任务

  • laravel 如何处理异步任务

    laravel 如何处理异步任务

  • iOS、for循环里的异步任务完成再进行其他操作

    for循环里的异步任务完成再进行其他操作 队列组处理for循环里的异步任务

  • iOS开发多线程(GCD)

    相关概念 队列:用于储存任务 线程:处理任务的单元 sync:同步处理(立即处理) async:异步处理(稍后处理...

  • AsyncTask - 基础篇

    概述 AsyncTask,Android早期推介处理异步任务的类,虽然现在有很多种方式去处理异步任务,如RX,三方...

  • AsyncTask 源码分析

    AsyncTask 的使用 Android 提供 AsyncTask 处理异步任务,基于异步消息处理机制,本质上是...

网友评论

      本文标题:异步任务的极简处理

      本文链接:https://www.haomeiwen.com/subject/zlapyqtx.html