Default – immediately schedules the coroutine for execution according to its context.
If the CoroutineDispatcher of the coroutine context returns
true from CoroutineDispatcher.isDispatchNeeded
function as most dispatchers do, then the coroutine code is dispatched for execution later, while the code that
invoked the coroutine builder continues execution.
Note that Dispatchers.Unconfined always returns
false from its CoroutineDispatcher.isDispatchNeeded
function, so starting a coroutine with Dispatchers.Unconfined by DEFAULT is the same as using UNDISPATCHED.
If coroutine Job is cancelled before it even had a chance to start executing, then it will not start its execution at all, but will complete with an exception.
Cancellability of a coroutine at suspension points depends on the particular implementation details of suspending functions. Use suspendCancellableCoroutine to implement cancellable suspending functions.