(Эту часть можно не читать)
{ Второй день пытаюсь хоть сколько-то продвинуться в изучении корутин, но в полном ступоре. Все материалы по ним просто отвратительные (по крайней мере, что я нашел на русском). Здесь только рассказывают об общей сути, а тут уже пример с конструкциями, которые никем не объяснены. Пробуешь запустить их у себя - так они еще и не работают. Никакой последовательности в материале, каждая статья - какая-то мешанина. Какие-то знания многопоточности в 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. Может, не до конца верно сделал и в этом проблема?
Наверное, я вообще под неправильным углом вижу корутины, но пока у меня не складывается цельной картины. Прошу вкратце объяснить, что тут не так. Можно хотя бы ссылку на толковый разбор всего этого