CoroutineContext — это набор объектов, определяющих поведение корутины. Он лежит в основе работы всех корутин и определяет:
- На каком диспетчере (потоке) выполняется корутина
- К какому
Jobона принадлежит (для отмены и иерархии) - Есть ли имя для логирования (
CoroutineName)
Структура CoroutineContext
«Под капотом» CoroutineContext — это интерфейс, реализующий нечто вроде иммутабельного Map<Key, Element>. Он устроен как цепочка Element-ов. Каждый Element — это одна часть контекста:
Dispatcher— задает диспетчер потоков(пулом потоков), на котором будут выполняться задачи.Job— отвечает за иерархию, статус активности и отмену.CoroutineName— позволяет задать имя корутины (для логов и дебага).ExceptionHandler— обработка не отловленных исключений
Все они реализуют CoroutineContext.Element, и каждый имеет свой Key