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 CoroutineDispatcher
public 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.async
public 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