[31강] https://youtu.be/Lpieg1zrKdg
0. 컨셉
코드1
...(10초 후)
코드2
...(응답이 오면)
코드3
코드1에서 10초 기다렸다가 코드2를 수행 할 수 있을까?
코드2에서 응답이 오면 코드3으로 진행 되도록 할 수 있을까?
만약 프로그램이 나 혼자라면, 10초 동안 의미 없는 일을 계속 시킬 수도 있으나, 잠시 대기하라는 명령어를 넣어 줄 수도 있습니다. 또는 "응답이 오면(상태가 바뀌면)" 이라는 명령어가 있다면 편리할 것입니다.
1. 비동기 함수 불러오기
kotlinx.coroutines.* 을 import하기
launch로 실행하기 (람다함수 형)
main이 종료되면 다 같이 종료되므로 runBlocking을 통해서 막아주기
import kotlinx.coroutines.*
fun main() {
runBlocking{ // main이 종료되는 것을 방지
launch{
for(i in 1..5){
println(i)
}
}
}
}
2. jong/await
delay(milisecond: Long) : 기다려
join과 await : 해당 프로세스가 종료될 때까지 기다려
import kotlinx.coroutines.*
fun main() {
runBlocking{ // main이 종료되는 것을 방지
val a = launch{
for(i in 1..5){
println(i)
delay(10)
}
"launch 종료"
}
val b = async {
println("async 실행")
delay(20)
"async 반환값"
}
println("시작")
println(b.await()) // b.가 종료 될 때까지 기다렸다가 다음 코드를 수행합니다.
println("async 종료")
a.join() // a.가 수행 완료 될 때까지 기다립니다.
println("launch 종료")
}
}
시작
1
async 실행
2
3
async 반환값
async 종료
4
5
launch 종료
3. cancel
import kotlinx.coroutines.*
fun main() {
runBlocking{ // main이 종료되는 것을 방지
val a = launch{
for(i in 1..5){
println(i)
delay(10)
}
"launch 종료"
}
val b = async {
println("async 실행")
delay(20)
"async 반환값"
}
println("시작")
println(b.await()) // b.가 종료 될 때까지 기다렸다가 다음 코드를 수행합니다.
println("async 종료")
a.cancel() // a.가 수행 완료 될 때까지 기다립니다.
println("launch 종료")
}
}
시작
1
async 실행
2
3
async 반환값
async 종료
launch 종료
4. 시간제한 withTimeoutOrNull
import kotlinx.coroutines.*
fun main() {
runBlocking{ // main이 종료되는 것을 방지
var result = withTimeoutOrNull(50){ // 100으로 바꾸고 실행해보자
for(i in 1..8) {
println(i)
delay(10)
}
"Finish"
}
println(result)
}
}
1
2
3
4
null
'코틀린' 카테고리의 다른 글
[kotlinlang.org] 한글화. 1 기본 유형 (0) | 2022.05.06 |
---|---|
[kotlinlang.org] 한글화. 0 기본 구문 (0) | 2022.05.05 |
[Youtube DiMo] 30강. 비트연산 (0) | 2022.05.03 |
[Youtube DiMo] 29강. 변수 (0) | 2022.05.03 |
[Youtube DiMo] 27-28강. 컬렉션 함수 (0) | 2022.05.03 |
댓글