Ответ
CoroutineScope — определяет границы корутины и управляет её жизненным циклом. Пример:
val scope = CoroutineScope(Dispatchers.Main)
scope.launch { /* работа */ }
Job — представляет собой задачу, которую можно отменить. Позволяет управлять выполнением корутины:
val job = scope.launch { /* работа */ }
job.cancel()
Dispatcher — определяет, на каком потоке будет выполняться корутина. Основные:
- Dispatchers.Main — UI-поток
- Dispatchers.IO — для операций ввода-вывода
- Dispatchers.Default — для CPU-интенсивных задач
CoroutineContext — хранит контекст выполнения (диспетчер, Job, обработчик исключений). Пример:
val context = Dispatchers.IO + Job() + CoroutineExceptionHandler { _, e -> }