@RobCapa

Kotlin Корутины — не могу разобраться?

(Эту часть можно не читать)
{ Второй день пытаюсь хоть сколько-то продвинуться в изучении корутин, но в полном ступоре. Все материалы по ним просто отвратительные (по крайней мере, что я нашел на русском). Здесь только рассказывают об общей сути, а тут уже пример с конструкциями, которые никем не объяснены. Пробуешь запустить их у себя - так они еще и не работают. Никакой последовательности в материале, каждая статья - какая-то мешанина. Какие-то знания многопоточности в Java вообще не помогают. В общем, прошу прощение за лишние строки текста, наболело. }

Взял пример с этого сайта, но у меня он не работает:
import android.annotation.SuppressLint
import kotlinx.coroutines.*
class Test() {
    companion object {
        @SuppressLint("NewApi")
        @JvmStatic
        fun main(args: Array<String>) = runBlocking(CommonPool) {
            sendEmailSuspending()
            println("Email sent successfully.")
            println("Finished")
        }

        suspend fun sendEmailSuspending(): Boolean {
            val msg = async(CommonPool) {
                delay(500)
                "The message content"
            }
            val recipient = async(CommonPool) { getReceiverAddressFromDatabase() }
            println("Waiting for email data")

            return sendEmail(recipient.await(), msg.await())
        }
    }
}

async - подчеркнуто красным. В консоли получаю "Cannot access 'CommonPool': it is internal in 'kotlinx.coroutines'"

Вообще, у меня все эти функции async, launch и т.д. работают только внутри функции runBlocking {}, написать вне не могу, подчеркивает красным. Может, так и нужно, не знаю. Но в статьях, вроде как, в примерах их пишут и без runBlocking.

У меня были проблемы с доступом к пакету kotlinx, когда я первый раз пытался к нему обратиться. Конечно, в большинстве статей и книг, которые я просмотрел, ничего об этом и слова сказано не было. Поискав информацию как-то смог решить эту проблему, исправив build.gradle. Может, не до конца верно сделал и в этом проблема?

Наверное, я вообще под неправильным углом вижу корутины, но пока у меня не складывается цельной картины. Прошу вкратце объяснить, что тут не так. Можно хотя бы ссылку на толковый разбор всего этого
  • Вопрос задан
  • 407 просмотров
Пригласить эксперта
Ответы на вопрос 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Взял пример с этого сайта, но у меня он не работает

Это очень старая статья. Api с тех пор изменилось

Вообще, у меня все эти функции async, launch и т.д. работают только внутри функции runBlocking {}, написать вне не могу,

Всё верно. Suspend функции можно вызывать только внутри suspend функций.

Главным источником знаний должна быть официальная документация. Там вполне понятно всё объясняется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы