В чем разница между CoroutineContext и Job в kotlinx.coroutines?

В библиотеке kotlinx.coroutines все конструкторы coroutine, такие как launch , async и т. Д. Принимают параметр CoroutineContext но также имеют дополнительный parent параметр с типом Job . В чем разница между CoroutineContext и Job ?

Job представляет собой сопрограмму или какую-то совокупную задачу, которая выполняется. Job – это CoroutineContext.Element , что означает, что его можно сохранить в контексте сопрограммы. CoroutineContext представляет собой набор различных элементов контекста coroutine, причем работа является всего лишь одним из таких элементов.

Фактически, контекст coroutine больше похож на карту, так как вы можете использовать ключи элемента coroutine для извлечения из него элементов. Например, если у вас есть значение ctx типа CoroutineContext , вы можете получить задание от него с помощью выражения ctx[Job] . Более подробную информацию можно найти в соответствующем разделе сопроводительного документа coroutines и документации для CoroutineContext .

Когда запускается новая сопрограмма, можно указать полный контекст. Если этот контекст содержит задание, то соответствующее задание становится родителем для новой сопрограммы.

parent параметр для сопроцессоров coroutine, таких как launch является просто удобством для более детальной спецификации родительских заданий. Поскольку в документации для launch подчеркивается, что явно заданное родительское задание имеет приоритет над заданием, которое было указано в контексте. Фактический пример того, как он может быть использован, приведен в этом разделе руководства.

Intereting Posts
Добавить функцию расширений в класс Math в kotlin Текст мигает в Android, с наиболее кратким Kotlin kotlin reflection получить список полей Функция Memoization в Котлине Dagger 2 обменивается экземпляром объекта между ведущими Одновременно создаются два объекта SQLiteDao, один из которых не создает таблицу при выполнении Helper «Ни одна из следующих функций не может быть вызвана с аргументами, предоставленными« с топливным HTTP-протоколом » Проблема с выпуском Android 3.0 Gradle 3.0 kapt – java.lang.OutOfMemoryError: превышен верхний предел GC Реализация интерфейса Java в Котлине Как работать с foldRight () в Котлине? Kotlin переопределяет абстрактное поведение val, объект vs class Okhttp3-запрос, возвращающий пустой ответ, а также разные заголовки, чем Postman Функция аннотирования интерфейса, которая должна вызывать супер Как я могу объявить аргумент в Kotlin, который принимает (только) перечисления