Kotlin异步转同步

本文探讨了如何将Kotlin中的异步代码转换为同步风格的编程,包括传统的方法和一种更加优雅的解决方案。通过学习,开发者可以更好地理解和处理Kotlin中的异步到同步转换问题。
摘要由CSDN通过智能技术生成

传统写法

  suspend fun requestLocation(context: Context) = withContext(Dispatchers.IO) {

        val lock = CountDownLatch(1)
        var mLocation: AMapLocation? = null

        val callBack = object : LocationManager.ILocationCallback {
            override fun locSuccess(location: AMapLocation?) {
                mLocation = location
                lock.countDown()
            }

            override fun locFail(errorCode: Int, errorInfo: String) {
                lock.countDown()
            }
        }
        try {
            LocationManager(callBack).location(context)
            lock.await()
        } catch (e: Exception) {
        }

        if (mLocation != null) {
            cLocation = mLocation
        }

        mLocation
    }

 

优雅写法

 

    suspend fun requestLocation(context: Context) = suspendCoroutine<AMapLocation?> {
        LocationManager(object : LocationMa
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值