美文网首页
1.协程的基本实现

1.协程的基本实现

作者: 学吉他的袁先生 | 来源:发表于2020-07-29 11:48 被阅读0次

协程是什么?
协程是一种非抢占式或者说协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行,本质上,协程是轻量级的线程。
协作式多任务图解:


生产馒头工厂机器

抢占式多任务图解:


公园投喂鱼食
kotlin协程代码是什么样子
场景利用百度天气api郑州天气,显示温度
retrofit框架作为网络框架
private val apiService by lazy {
    val retrofit=Retrofit.Builder()
        .baseUrl("www.baidu.com")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    retrofit.create(TestService::class.java)
}

仅使用retrofit

val message = apiService.getMessage("郑州")
message.enqueue(object :Callback<WeatherEntity>{
    override fun onFailure(call: Call<WeatherEntity>, t: Throwable) {
        println(t.message)
    }

    override fun onResponse(call: Call<WeatherEntity>, response: Response<WeatherEntity>) {
        if (response.isSuccessful){
            response.body()?.let {
                println(it.temperature)
            }
        }
    }
})

retrofit+rxjava

apiService.getMessage2("郑州")
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(object :Observer<WeatherEntity>{
        override fun onComplete() {
            println("onComplete")
        }

        override fun onSubscribe(d: Disposable?) {
            println("onSubscribe")
        }

        override fun onNext(value: WeatherEntity?) {
            println("onNext")
        }

        override fun onError(e: Throwable?) {
            println("onError")
        }

    })

kotlin协程方式

GlobalScope.launch {
    try {
        val weatherEntity = apiService.getMessage3("郑州")
        println(weatherEntity.temperature)
    }catch (e:Throwable){
        println(e.message)
    }
}

协程不仅使代码量减少,避免回调地狱,而且使我们更加关注自己的代码逻辑

相关文章

  • 1.协程的基本实现

    协程是什么?协程是一种非抢占式或者说协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行,本质上,协程是...

  • 协程介绍

    协程 协程,又称微线程,纤程。英文名Coroutine。 1.协程是什么? 协程是python个中另外一种实现多任...

  • 并发编程-协程

    协程greenlet模块 (gevent实现原理)gevent模块 (注册协程,实现异步编程) 协程的应用eg:...

  • 协程(三)IEnumerable、IEnumerator、for

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(五)简单模拟协程

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(一)基本使用

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(六)有关优化

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(二)协程什么时候调用

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(四)yield与迭代器

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • gevent及greenlet实现协程

    1. 一个用yield实现的简单send调用 2. 下面的这个算是一个简单的协程 3. greenlet实现协程 ...

网友评论

      本文标题:1.协程的基本实现

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