Suspend 함수

James_·2022년 3월 14일
0

코루틴

목록 보기
2/4

Suspend 함수

중단하거나 재개할 수 있는 함수

순차적인 Suspend 함수

import kotlin.random.Random
import kotlin.system.*
import kotlinx.coroutines.*

suspend fun getRandom1(): Int {
    delay(1000L)
    return Random.nextInt(0, 500)
}

suspend fun getRandom2(): Int {
    delay(1000L)
    return Random.nextInt(0, 500)
}

fun main() = runBlocking {
    val elapsedTime = measureTimeMillis {
        val value1 = getRandom1()
        val value2 = getRandom2()
        println("${value1} + ${value2} = ${value1 + value2}")
    }
    println(elapsedTime)
}
결과: 348 + 83 = 431 랜덤이라서 실행할때마다 결과가 다름
실행시간: 2015

메인함수를 보면 value1 다음에 value2가 순차적으로 실행되게 되는데 여기서 동시에 실행하면 성능을 훨씬 높일 수 있는 방법이 있다.

async를 사용하여 동시에 수행하기

import kotlin.random.Random
import kotlin.system.*
import kotlinx.coroutines.*

suspend fun getRandom1(): Int {
    delay(1000L)
    return Random.nextInt(0, 500)
}

suspend fun getRandom2(): Int {
    delay(1000L)
    return Random.nextInt(0, 500)
}

fun main() = runBlocking {
    val elapsedTime = measureTimeMillis {
        val value1 = async { getRandom1() }
        val value2 = async { getRandom2() }
        println("${value1.await()} + ${value2.await()} = ${value1.await() + value2.await()}")  // await이 서스펜션가 된다. 
    }
    println(elapsedTime)
}
결과: 57 + 429 = 486
실행시간: 1028

순차적으로 실행할 때보다 시간이 확실히 많이 줄어든 것을 확인 할 수 있다.

async와 launch의 차이

실행 목적을 생각했을 때 async는 결과 값을 받아야하는 경우, launch는 결과값을 받지 않아도 되는 경우(response 받은 후 liveData 값 변경)라고 생각하면 된다.

profile
Android 개발자

0개의 댓글