ContinuationInterceptor
Marks coroutine context element that intercepts coroutine continuations. The coroutines framework uses ContinuationInterceptor.Key to retrieve the interceptor and intercepts all coroutine continuations with interceptContinuation invocations.
ContinuationInterceptor behaves like a polymorphic element , meaning that its implementation delegates get and minusKey to getPolymorphicElement and minusPolymorphicKey respectively. ContinuationInterceptor subtypes can be extracted from the coroutine context using either ContinuationInterceptor.Key or subtype key if it extends AbstractCoroutineContextKey .
Types
Key
The key that defines the context interceptor.
companion
object
Key
:
Key
<
ContinuationInterceptor
>
Functions
get
Returns the element with the given
key
from this context or
null
.
open
operator
fun
<
E
:
Element
>
get
(
key
:
Key
<
E
>
)
:
E
?
interceptContinuation
Returns continuation that wraps the original continuation , thus intercepting all resumptions. This function is invoked by coroutines framework when needed and the resulting continuations are cached internally per each instance of the original continuation .
abstract
fun
<
T
>
interceptContinuation
(
continuation
:
Continuation
<
T
>
)
:
Continuation
<
T
>
minusKey
Returns a context containing elements from this context, but without an element with the specified key .
open
fun
minusKey
(
key
:
Key
<
*
>
)
:
CoroutineContext
releaseInterceptedContinuation
Invoked for the continuation instance returned by interceptContinuation when the original continuation completes and will not be used anymore. This function is invoked only if interceptContinuation had returned a different continuation instance from the one it was invoked with.
open
fun
releaseInterceptedContinuation
(
continuation
:
Continuation
<
*
>
)
Extension Functions
getPolymorphicElement
Returns the current element if it is associated with the given
key
in a polymorphic manner or
null
otherwise.
This method returns non-null value if either
Element.key
is equal to the given
key
or if the
key
is associated
with
Element.key
via
AbstractCoroutineContextKey
.
See
AbstractCoroutineContextKey
for the example of usage.
fun
<
E
:
Element
>
Element
.
getPolymorphicElement
(
key
:
Key
<
E
>
)
:
E
?
minusPolymorphicKey
Returns empty coroutine context if the element is associated with the given
key
in a polymorphic manner
or
null
otherwise.
This method returns empty context if either
Element.key
is equal to the given
key
or if the
key
is associated
with
Element.key
via
AbstractCoroutineContextKey
.
See
AbstractCoroutineContextKey
for the example of usage.
fun
Element
.
minusPolymorphicKey
(
key
:
Key
<
*
>
)
:
CoroutineContext