| package examples |
| |
| import kotlinx.coroutines.experimental.CommonPool |
| import kotlinx.coroutines.experimental.delay |
| import kotlinx.coroutines.experimental.launch |
| import kotlinx.coroutines.experimental.runBlocking |
| |
| fun main(args: Array<String>) = runBlocking<Unit> { |
| val job = launch(CommonPool) { |
| var nextPrintTime = 0L |
| var i = 0 |
| while (isActive) { // cancellable computation loop |
| val currentTime = System.currentTimeMillis() |
| if (currentTime >= nextPrintTime) { |
| println("I'm sleeping ${i++} ...") |
| nextPrintTime = currentTime + 500L |
| } |
| } |
| } |
| delay(1300L) // delay a bit |
| println("I'm tired of waiting!") |
| job.cancel() // cancels the job |
| delay(1300L) // delay a bit to see if it was cancelled.... |
| println("Now I can quit.") |
| } |