class WeakTimeoutQueue
It provides ability to cancel jobs and schedule coroutine with timeout. Unlike regular withTimeout this implementation is never scheduling timer tasks but only checks for current time. This makes timeout measurement much cheaper and doesn't require any watchdog thread.
There are two limitations:
The last one limitation is generally unacceptable however in the particular use-case (closing IDLE connection) it is just fine as we really don't care about stalling IDLE connections if there are no more incoming
interface Registration : DisposableHandle
register function result |
WeakTimeoutQueue(timeoutMillis: Long, clock: () -> Long = { System.currentTimeMillis() })
It provides ability to cancel jobs and schedule coroutine with timeout. Unlike regular withTimeout this implementation is never scheduling timer tasks but only checks for current time. This makes timeout measurement much cheaper and doesn't require any watchdog thread. |
val timeoutMillis: Long |
fun cancel(): Unit
Cancel all registered timeouts |
|
fun process(): Unit
Process and cancel all jobs that are timed out |
|
fun register(job: Job): Registration
Register job in this queue. It will be cancelled if doesn't complete in time. |
|
suspend fun <T> withTimeout(block: suspend CoroutineScope.() -> T): T
Execute block and cancel if doesn't complete in time. Unlike the regular kotlinx.coroutines withTimeout, this also checks for cancellation first and fails immediately. |