public class Dispatchers
Groups various implementations of class CoroutineDispatcher.
class CoroutineDispatcher| Modifier and Type | Field and Description |
|---|---|
static Dispatchers |
INSTANCE
Groups various implementations of
class CoroutineDispatcher. |
| Modifier and Type | Method and Description |
|---|---|
static CoroutineDispatcher |
getDefault()
The default
class CoroutineDispatcher that is used by all standard builders like
BuildersKt.launch, BuildersKt.async, etc
if no dispatcher nor any other ContinuationInterceptor is specified in their context. |
static CoroutineDispatcher |
getIO()
The
class CoroutineDispatcher that is designed for offloading blocking IO tasks to a shared pool of threads. |
static MainCoroutineDispatcher |
getMain()
A coroutine dispatcher that is confined to the Main thread operating with UI objects.
This dispatcher can be used either directly or via
CoroutineScopeKt.MainScope factory.
Usually such dispatcher is single-threaded. |
static CoroutineDispatcher |
getUnconfined()
A coroutine dispatcher that is not confined to any specific thread.
It executes initial continuation of the coroutine immediately in the current call-frame
and lets the coroutine resume in whatever thread that is used by the corresponding suspending function, without
mandating any specific threading policy.
Note: use with extreme caution, not for general code.
|
public static Dispatchers INSTANCE
Groups various implementations of class CoroutineDispatcher.
class CoroutineDispatcherpublic static CoroutineDispatcher getDefault()
The default class CoroutineDispatcher that is used by all standard builders like
BuildersKt.launch, BuildersKt.async, etc
if no dispatcher nor any other ContinuationInterceptor is specified in their context.
It is backed by a shared pool of threads on JVM. By default, the maximal level of parallelism used by this dispatcher is equal to the number of CPU cores, but is at least two. Level of parallelism X guarantees that no more than X tasks can be executed in this dispatcher in parallel.
public static MainCoroutineDispatcher getMain()
A coroutine dispatcher that is confined to the Main thread operating with UI objects.
This dispatcher can be used either directly or via CoroutineScopeKt.MainScope factory.
Usually such dispatcher is single-threaded.
Access to this property may throw IllegalStateException if no main thread dispatchers are present in the classpath.
Depending on platform and classpath it can be mapped to different dispatchers:
On JS and Native it is equivalent of Dispatchers.getDefault dispatcher.
On JVM it either Android main thread dispatcher, JavaFx or Swing EDT dispatcher. It is chosen by https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html.
In order to work with Main dispatcher, following artifact should be added to project runtime dependencies:
kotlinx-coroutines-android for Android Main thread dispatcher
kotlinx-coroutines-javafx for JavaFx Application thread dispatcher
kotlinx-coroutines-swing for Swing EDT dispatcher
Implementation note: MainCoroutineDispatcher.getImmediate is not supported on Native and JS platforms.
public static CoroutineDispatcher getUnconfined()
A coroutine dispatcher that is not confined to any specific thread. It executes initial continuation of the coroutine immediately in the current call-frame and lets the coroutine resume in whatever thread that is used by the corresponding suspending function, without mandating any specific threading policy. Note: use with extreme caution, not for general code.
Note, that if you need your coroutine to be confined to a particular thread or a thread-pool after resumption,
but still want to execute it in the current call-frame until its first suspension, then you can use
an optional enum CoroutineStart parameter in coroutine builders like
BuildersKt.launch and BuildersKt.async setting it to the
the value of CoroutineStart.UNDISPATCHED.
Note: This is an experimental api. Semantics, order of execution, and particular implementation details of this dispatcher may change in the future.
enum CoroutineStart,
BuildersKt.launch,
BuildersKt.asyncpublic static CoroutineDispatcher getIO()
The class CoroutineDispatcher that is designed for offloading blocking IO tasks to a shared pool of threads.
Additional threads in this pool are created and are shutdown on demand.
The number of threads used by this dispatcher is limited by the value of
"kotlinx.coroutines.io.parallelism" (IO_PARALLELISM_PROPERTY_NAME) system property.
It defaults to the limit of 64 threads or the number of cores (whichever is larger).
This dispatcher shares threads with a Dispatchers.getDefault dispatcher, so using
withContext(Dispatchers.IO) { ... } does not lead to an actual switching to another thread —
typically execution continues in the same thread.
class CoroutineDispatcher,
Dispatchers.getDefault