ContextValue
A common abstraction over ThreadLocal and CoroutineContext that integrates both worlds. Allows to set a value that can be read from everywhere on the current thread or coroutine. A suspendable function can call non suspendable functions and the value is synchronized between the CoroutineContext and the internal ThreadLocal.