✏️ 예제를 통한 복습
suspend fun getRandNum1() : Int {
delay(1000L)
return Random.nextInt(0,500)
}
suspend fun getRandNum2() : Int {
delay(1000L)
return Random.nextInt(0,500)
}
fun main() = runBlocking {
val time = measureTimeMills{
val one = getRandNum1()
val two = getRandNum2()
println("${one} + ${two} = ${one + two}")
}
println(time)
}
순차적으로 실행되어 1000L + 1000L = 2초가 걸림
개별적으로 실행되지만, 순차적으로 실행되어서 항상 getRandNum1이 먼저 실행된다
💡 두 함수가 동시에 실행되면 더 효율적이겠다 -> async
async를 사용하면 두 함수가 각각 별도의 코루틴으로 동작
📌 async (CoroutineBuilder) vs launch (CoroutineBuilder)
async : 결과값을 반환(await를 사용)
launch : 결과를 반환하지 않아도 될 때 (job의 join, cancel 같은 일)
suspend fun getRandNum1() : Int {
delay(1000L)
return Random.nextInt(0,500)
}
suspend fun getRandNum2() : Int {
delay(1000L)
return Random.nextInt(0,500)
}
fun main() = runBlocking {
val time = measureTimeMills{
val one = async {
getRandNum1()
}
val two = asynch {
getRandNum2()
}
println("${one.await()} + ${two.await()} = ${one.await() + two.await()}")
}
println(time)
}
1000L ,1000L이 같이 수행되므로 1초가 걸림
await() = job의 join과 비슷 + 결과반환
async와 await는 항상 짝을 이루고, await는 중단점이 된다
async를 사용하는 순간 코드블록이 수행을 준비하는데, 만약 수행을 좀 늦추고 싶다면
async(start = CoroutineStart.LAZY)를 선언하고 .start()를 선언하면 큐에 수행을 예약한다
아직 개념잡기에 여념이 없습니다😂 패스트 캠퍼스 강의 강추합니다,, 선생님 만세
다음은 Dispatcher로 돌아오겠습니다 :)
'💻 프로그래밍' 카테고리의 다른 글
[Git , SourceTree] GitHub 토큰 발급하기 , cherrypick (1) | 2023.07.20 |
---|---|
[🔥Coroutine] #4 suspend, Job 간단하게 살펴보기 (0) | 2022.11.30 |
[🔥 Coroutine] #3 예제로 복습하기 (0) | 2022.11.12 |
[🔥 Coroutine] #2 runBlocking , async (0) | 2022.11.05 |
[🔥Coroutine] # 1 Coroutine을 배워봅시다 (0) | 2022.08.30 |