728x90
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)초에 한 번 일어난다.
728x90
반응형
'컴퓨터 언어 > Kotlin' 카테고리의 다른 글
05. 코루틴의 runBlocking (0) | 2022.07.05 |
---|---|
04. 코루틴의 Context (0) | 2022.07.05 |
02. 코루틴 첫 시작 (0) | 2022.07.04 |
01. 코루틴이란 무엇인가? (0) | 2022.06.27 |
코루틴 관련해서 좋은 블로그 (0) | 2021.08.31 |