fun main(args : Array<String>){
runBlocking{
greetDelayed(1000)
}
}
suspend fun greetDelayed(delayMillis : Long){
delay(delayMillis)
println("Hello, world!")
}
비 일시 중단 코드에서 함수를 호출하기 위해선 코루틴 빌더로 감싸야한다.
fun main(args : Array<String>) : Unit = runBlocking{
GlobalScope.launch(Dispatchers.Unconfined) {
println("Starting in ${Thread.currentThread().name}")
delay(1000L)
println("Resuming in ${Thread.currentThread().name}")
}.join()
}
중단 전까지는 main에서 실행되다 중단 후, DefaultExecutor에서 실행되는 것을 확인할 수 있다.
fun main(args : Array<String>) : Unit = runBlocking{
val dispatcher = newSingleThreadContext(name = "myThread")
GlobalScope.launch(dispatcher){
println("Starting in ${Thread.currentThread().name}")
delay(500L)
println("Resuming in ${Thread.currentThread().name}")
}.join()
}
하나의 스레드 (myThread)에서 계속 실행되는 것을 확인할 수 있다.
fun main(args : Array<String>) : Unit = runBlocking{
val dispatcherPool = newFixedThreadPoolContext(4,"myPool")
GlobalScope.launch(dispatcherPool) {
println("Staring in ${Thread.currentThread().name}")
delay(500L)
println("Resuming in ${Thread.currentThread().name}")
}.join()
}
fun main(args : Array<String>) : Unit = runBlocking{
val handler = CoroutineExceptionHandler { context, throwable ->
println("Error captured in $context")
println("Message: ${throwable.message}")
}
GlobalScope.launch(handler) {
TODO("Not implemented yet!")
}
delay(500L)
}
fun main(args : Array<String>) : Unit = runBlocking{
val duration = measureTimeMillis {
val job = launch {
try{
while(isActive){
delay(500L)
println("still running")
}
}finally {
withContext(NonCancellable) {
println("cancelled, will end now")
delay(5000L)
println("delay completed, bye bye")
}
}
}
delay(1200L)
job.cancelAndJoin()
}
println("Took $duration ms")
}
fun main(args : Array<String>) : Unit = runBlocking{
val dispatcher = newSingleThreadContext("myThread")
val handler = CoroutineExceptionHandler { context, throwable ->
println("Error captured")
println("Message: ${throwable.message}")
}
GlobalScope.launch(dispatcher + handler) {
println("Running in ${Thread.currentThread().name}")
TODO("Not implemented")
}.join()
}
fun main(args : Array<String>) : Unit = runBlocking{
val dispatcher = newSingleThreadContext("myThread")
val handler = CoroutineExceptionHandler { context, throwable ->
println("Error captured")
println("Message: ${throwable.message}")
}
val context = dispatcher + handler
val tmpCtx = context.minusKey(dispatcher.key)
GlobalScope.launch(tmpCtx) {
println("Running in ${Thread.currentThread().name}")
TODO("Not implemented")
}.join()
}
myThread가 아닌 Default 스레드가 실행되는 것을 확인할 수 있다.
fun main(args : Array<String>) : Unit = runBlocking{
val dispatcher = newSingleThreadContext("myThread")
val name = GlobalScope.async(dispatcher) {
"Susan Calvin"
}.await()
println("User $name")
val name1= withContext(dispatcher){
"Susan Calvin"
}
println("User1 $name1")
}
동일한 Susan Calvin의 결과 값을 확인할 수 있다.