fun main(args: Array<String>) = runBlocking {
val handler = CoroutineExceptionHandler({ context, throwable ->
println("Error captured in $context")
println("Message: ${throwable.message}")
})
GlobalScope.launch(handler) {
TODO("Not implemented yet!")
}
}
suspend fun nonCancellable() {
val duration = measureTimeMillis {
val job = GlobalScope.launch {
try {
while (isActive) {
delay(500)
println("still running")
}
} finally {
withContext(NonCancellable) { // NoneCancellable 컨텍스트를 사용하여 코루틴이 취소 되더라도 중지 되지 않는다.
println("cancelled, will delay finalization now")
delay(5000)
println("delay completed, bye bye")
}
}
}
delay(1200)
job.cancelAndJoin()
}
println("Took $duration ms")
}
fun main(args: Array<String>) = runBlocking {
val dispatcher = newSingleThreadContext("myDispatcher")
val handler = CoroutineExceptionHandler { _, throwable ->
println("Error captured")
println("Message: ${throwable.message}")
}
// Combine two contexts together
val context = dispatcher + handler
GlobalScope.launch(context) {
println("Running in ${Thread.currentThread().name}")
TODO("Not implemented!")
}.join()
}
fun main(args: Array<String>) = runBlocking {
val dispatcher = newSingleThreadContext("myDispatcher")
val handler = CoroutineExceptionHandler { _, throwable ->
println("Error captured")
println("Message: ${throwable.message}")
}
// Combine two contexts together
val context = dispatcher + handler
// Remove one element from the context
val tmpCtx = context.minusKey(dispatcher.key)
GlobalScope.launch(tmpCtx) {
println("Running in ${Thread.currentThread().name}")
TODO("Not implemented!")
}.join()
}