Core primitives to work with coroutines.

Coroutine builder functions:

Name Result Scope Description
launch Job CoroutineScope Launches coroutine that does not have any result
async Deferred CoroutineScope Returns a single value with the future result
produce ReceiveChannel ProducerScope Produces a stream of elements
runBlocking T CoroutineScope Blocks the thread while the coroutine runs

Coroutine dispatchers implementing CoroutineDispatcher:

Name Description
Dispatchers.Default Confines coroutine execution to a shared pool of background threads
Dispatchers.Unconfined Does not confine coroutine execution in any way

More context elements:

Name Description
NonCancellable A non-cancelable job that is always active
CoroutineExceptionHandler Handler for uncaught exception

Synchronization primitives for coroutines:

Name Suspending functions Description
Mutex lock Mutual exclusion
Channel send, receive Communication channel (aka queue or exchanger)

Top-level suspending functions:

Name Description
delay Non-blocking sleep
yield Yields thread in single-threaded dispatchers
withContext Switches to a different context
withTimeout Set execution time-limit with exception on timeout
withTimeoutOrNull Set execution time-limit will null result on timeout
awaitAll Awaits for successful completion of all given jobs or exceptional completion of any
joinAll Joins on all given jobs

Cancellation support for user-defined suspending functions is available with suspendCancellableCoroutine helper function. NonCancellable job object is provided to suppress cancellation with withContext(NonCancellable) {...} block of code.

Select expression waits for the result of multiple suspending functions simultaneously:

Receiver Suspending function Select clause Non-suspending version
Job join onJoin isCompleted
Deferred await onAwait isCompleted
SendChannel send onSend trySend
ReceiveChannel receive onReceive tryReceive
ReceiveChannel receiveCatching onReceiveCatching tryReceive
Mutex lock onLock tryLock
none delay onTimeout none



General-purpose coroutine builders, contexts, and helper functions.


Channels — non-blocking primitives for communicating a stream of elements between coroutines.


Flow — asynchronous cold stream of elements.


Low-level primitives for finer-grained control of coroutines.


Select expression to perform multiple suspending operations simultaneously until one of them succeeds.


Synchronization primitives (mutex).


Obsolete and deprecated module to test coroutines. Replaced with kotlinx-coroutines-test module.


All Types