컴퓨터 언어/Kotlin
03. 코루틴 suspend 함수
가나무마
2022. 7. 5. 07:46
suspend 함수는 코루틴 내에서 불리거나 혹은 같은 suspend 함수 내에서만 호출 될 수 있습니다.
package com.goodee.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.databinding.DataBindingUtil
import com.goodee.test.databinding.ActivityMainBinding
import kotlinx.coroutines.*
class MainActivity : AppCompatActivity() {
private val TAG: String = "로그"
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
val startTime = System.currentTimeMillis()
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.nextBtn.setOnClickListener {
val startTime = System.currentTimeMillis()
CoroutineScope(Dispatchers.IO).launch {
// 현재 코루틴을 3초간 멈춘 후에 출력함.
Log.d(TAG,"MainActivity - ${doNetworkCall1()} time : ${System.currentTimeMillis() - startTime}")
// 이전 과정이 끝나고 5초 멈춘 후에 출력함.
Log.d(TAG,"MainActivity - ${doNetworkCall2()} time : ${System.currentTimeMillis() - startTime}")
}
}
}
// 3초가 걸리는 suspend 함수1
suspend fun doNetworkCall1(): String {
delay(3 * 1000L)
return "answer1"
}
// 6초가 걸리는 suspend 함수2
suspend fun doNetworkCall2(): String {
delay(5 * 1000L)
return "answer2"
}
}
첫번째 suspend 함수와 두번째 suspend 함수는 같은 코루틴 내에 있으므로 delay 함수가 서로에게 영향을 준다.
따라서, 출력 결과는 3초에 한 번. 8(3+5)초에 한 번 일어난다.