Suspend Function(挂起函数)
5. 挂起函数(Suspend Function)
核心定义
用suspend关键字修饰的函数,可在协程中暂停执行(不阻塞线程),等待结果后恢复执行,是 Kotlin 协程的核心。
关键特征
- 只能在协程或其他挂起函数中调用;
- 编译期会被转换为带有续体(Continuation)的普通函数;
- 支持
delay()、await()等挂起操作,替代阻塞式的Thread.sleep()。
使用场景
- 异步操作(网络请求、数据库操作、文件读写);
- 协程中的耗时操作(非阻塞式等待);
- 与 Flow、StateFlow 等协程数据流配合使用。
示例
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
// 挂起函数:模拟网络请求
suspend fun fetchData(): String {
delay(1000) // 非阻塞式延迟(替代Thread.sleep)
return "模拟网络请求返回的数据"
}
// 挂起函数调用另一个挂起函数
suspend fun processData(): String {
val data = fetchData()
return "处理后的数据:$data"
}
// 使用(必须在协程中调用)
fun main() = runBlocking {
val result = processData()
println(result) // 处理后的数据:模拟网络请求返回的数据
}
注意事项
- 挂起函数不会自动创建协程,需在
launch/async/runBlocking等协程作用域中调用; - 挂起函数的异常可通过
try-catch捕获,或通过CoroutineExceptionHandler处理。