💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 5 тематических шкал.
Вопрос 2 из 25
Какой тест лучше всего защищает край контракта «Отмена и ожидание Job»?
Отдельно проверить предположение, что сначала `done`, затем `false`, потому что cancel действует после delay.
Считать опасной границей ситуацию, где печатается только `done`: cancelAndJoin не меняет Job.
Зафиксировать сценарий, где ожидается: Печатается `false`, но тело не выполняется.
Проверить крайний ввод, при котором код зависает, так как join нельзя вызывать после cancel.
CPU-цикл без suspension/check (`yield`, `ensureActive`, `isActive`) может не заметить отмену своевременно.
Вопрос 6 из 25
Что может усложниться в сопровождении после изменения «Отмена и ожидание Job»: Хранить Job только там, где владелец обязан отменять конкретную операцию, и предпочитать отмену родительского scope для группы работ?
Решение оправдано лишь при условии: Печатается только `done`: cancelAndJoin не меняет Job.
Обратная сторона изменения состоит в том, что код зависает, так как join нельзя вызывать после cancel.
Явный Job даёт точечный контроль, но множество независимых Job легко разрывает структурированную конкурентность.
Сопровождение усложнится, если окажется, что печатается `false`, но тело не выполняется.
Новый риск связан с тем, что сначала `done`, затем `false`, потому что cancel действует после delay.
Вопрос 23 из 25
Как укрепить «Отмена и ожидание Job», не переписывая соседние модули?
Kotlin Жизненный цикл Job · Отмена и ожидание Job Копировать
// Сохраните назначение фрагмента, но укрепите его контракт.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch { delay(100); println("done") }
job.cancelAndJoin()
println(job.isCancelled)
}
Перенести проверку в вызывающий код, исходя из того, что печатается только `done`: cancelAndJoin не меняет Job.
Добавить защитную проверку перед фрагментом, поскольку сначала `done`, затем `false`, потому что cancel действует после delay.
Вынести участок в отдельный метод, считая верным следующее: Код зависает, так как join нельзя вызывать после cancel.
Хранить Job только там, где владелец обязан отменять конкретную операцию, и предпочитать отмену родительского scope для группы работ.
Оставить структуру прежней, документировав утверждение: Печатается `false`, но тело не выполняется.