Это зависит.Что делает longComputation
?Когда вы помечаете функцию как suspend
, это не означает, что вы не можете включить в нее блокирующий код.Например, посмотрите на это:
suspend fun blockingSuspendFunction(){
BigInteger(1500, Random()).nextProbablePrime()
}
Код внутри функции приостановки, очевидно, использует процессор и блокирует вызывающую программу. По соглашению этого делать не следует, поскольку если вы вызываете функцию приостановки, вы ожидаете ее , а не блокирования потока:
Соглашение: функции приостановки не блокируют поток вызывающего.(https://medium.com/@elizarov/blocking-threads-suspending-coroutines-d33e11bf4761)
Чтобы заставить такую функцию «вести себя как приостанавливающая функция», необходимо передать блокировку другому рабочему потоку, что (по рекомендации) должно произойти с withContext
:
suspend fun blockingSuspendFunction() = withContext(Dispatchers.Default) {
BigInteger.probablePrime(2048, Random())
}