//job은 예외를 던진 곳까지 전파시킨다.
fun main(args : Array<String>) = runBlocking{
val job = GlobalScope.launch {
TODO("Not Implemented")
}
delay(2000L)
}
fun main(args : Array<String>) = runBlocking{
val job = GlobalScope.launch(start = CoroutineStart.LAZY) {
TODO("Not Implemented")
}
delay(2000L)
}
fun main(args : Array<String>) : Unit = runBlocking{
val job = GlobalScope.launch(start = CoroutineStart.LAZY) {
delay(2000L)
println("Complete")
}
job.join()
}
join()는 Job의 완료를 기다리기 때문에 일시 중단 함수 or 코루틴에서 호출해야 한다.
fun main(args : Array<String>) {
val task = GlobalScope.launch {
delay(1000L)
println("Complete")
}
task.start()
}
Complete 출력 없이 프로그램이 종료되는 것을 확인할 수 있다.
//handler 처리
fun main(args : Array<String>) = runBlocking{
val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
println("Job cancelled due to ${throwable.message}")
}
GlobalScope.launch(exceptionHandler) {
TODO("Not implemented yet")
}
delay(2000L)
}
//invokeOnCompleteion 처리
fun main(args : Array<String>) = runBlocking{
GlobalScope.launch {
TODO("Not implemented yet")
}.invokeOnCompletion { cause ->
cause?.run {
println("Job Cancelled due to $this")
}
}
delay(2000L)
}
//try-catch 문으로 예외 처리가 가능하다.
fun main(args : Array<String>) : Unit = runBlocking{
val deferred = GlobalScope.async {
TODO("Not implemented yet")
}
try {
deferred.await()
}catch (e : Throwable){
println("Deferred cancelled due to ${e.message}")
}
}
//에러를 전파 받는 곳에 handler를 이용한다.
fun main(args: Array<String>): Unit = runBlocking {
val exceptionHandler = CoroutineExceptionHandler{_, handler ->
println("Defered cancelled due to ${handler.message}")
}
val deferred = GlobalScope.async {
TODO("Not implemented yet")
}
GlobalScope.launch(exceptionHandler){
deferred.await()
}.join()
}
fun main(args: Array<String>): Unit = runBlocking {
val task = measureTimeMillis {
val job = GlobalScope.launch{
delay(2000L)
}
job.join()
//restart
job.start()
job.join()
}
println("Time: $task ms")
}
2초 정도의 시간이 출력되는 것을 확인할 수 있다