Kotlin 异步编程:初学者完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin 异步编程:初学者完全指南



现代应用程序越来越需要同时执行多个任务:从网络加载数据、与数据库交互、处理用户输入。在 Kotlin 语言中,这是通过基于协程 (coroutines) 的异步编程实现的。这是一个强大而优雅的工具,允许您编写非阻塞代码,而无需复杂的回调。



在本文中,我们将介绍 Kotlin 中异步编程的基础知识:什么是协程,如何使用 launch、async 和 await,以及了解调度器和错误处理。本材料面向已经熟悉 Kotlin 基本语法的初学者开发者。



什么是协程以及为什么需要它们?



协程是一个轻量级的执行线程,可以在不阻塞主线程的情况下被挂起和恢复。与传统的线程不同,协程不绑定到系统资源,可以在一个线程中执行并在它们之间切换。



协程的主要优势:

  • 轻量 — 可以启动数千个协程而不会显著消耗内存。
  • 挂起 (suspend) — 函数可以“冻结”其执行,而不阻塞线程。
  • 结构化并发 — 协程自动管理其生命周期。
  • 简单性 — 代码看起来像同步代码,没有嵌套的回调。


要使用协程,需要在 build.gradle.kts 中添加依赖:



dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}


基本构建块:launch、async 和 suspend



suspend 函数



任何可以挂起协程执行的函数都用关键字 suspend 标记。这些函数只能在协程内部或其他 suspend 函数中调用。



suspend fun fetchUserData(): String {    delay(1000) // 模拟延迟    return "User data loaded"}


函数 delay() 类似于 Thread.sleep(),但不会阻塞线程。



launch — 启动不返回结果的协程



构建器 launch 启动一个新的协程,它不返回结果(返回 Job)。用于“启动并忘记”类型的任务。



import kotlinx.coroutines.*

fun main() = runBlocking { launch { println("协程 1 已启动") delay(1000) println("协程 1 已完成") } println("主线程继续工作")}


输出:

主线程继续工作协程 1 已启动协程 1 已完成


请注意:runBlocking 仅用于教学示例或入口点(例如在 main() 中)。在实际应用程序(Android、服务器)中不需要使用它。



async 和 await — 获取结果



如果协程需要返回结果,则使用构建器 async。它返回一个 Deferred<T> 对象,可以通过 await() 从中获取值。



fun main() = runBlocking {    val deferredResult: Deferred<String> = async {        delay(1500)        "计算结果"    }

println("等待结果...") val result = deferredResult.await() println("获取结果: $result")}


输出:

等待结果...获取结果: 计算结果


使用 async 可以启动多个并行任务:





                
                

博客

书籍推荐