В каких случаях использовать Coroutines не прагматично

Ответ

Coroutines не подходят для CPU-bound задач (тяжёлые вычисления), т.к. они выполняются в одном потоке и могут заблокировать диспетчер. В таких случаях лучше использовать RxJava или чистые потоки.

Также не стоит использовать корутины для:

  • Долгих синхронных операций (например, работа с файлами в основном потоке)
  • Когда нужен точный контроль над потоками (корутины абстрагируют управление потоками)
  • В простых асинхронных задачах, где ListenableFuture или колбэки достаточно

Пример CPU-bound задачи:

// Плохо - заблокирует Dispatchers.IO
suspend fun calculateFactorial(n: Int): BigInteger = withContext(Dispatchers.IO) {
    var result = BigInteger.ONE
    for (i in 1..n) result = result.multiply(BigInteger.valueOf(i.toLong()))
    result
}