Введение в Coroutine в Котлине
Coroutine — это облегченный поток выполнения, который можно приостановить и возобновить позже. Уже есть много статей или тем, посвященных этому, но этот пост отличается от других, он прост и может облегчить вам начало работы. Он будет охватывать следующие части:
Обзор
Как и многие другие языки программирования, такие как JS, Python, Coroutine — это функция, предоставляемая Kotlin, которая позволяет нам выполнять длительные и трудоемкие задачи. Суммируя:
В Kotlin сопрограммы — это способ написания асинхронного неблокирующего кода более последовательным и удобным для чтения способом.
По сути, ничего нового здесь нет. Мы можем рассматривать Kotlin Coroutine как фреймворк/библиотеку, которая инкапсулирует некоторые общие способы использования при работе с асинхронизацией.
Простые примеры использования сопрограмм в Kotlin
Чтобы использовать сопрограммы в Kotlin, вам необходимо включить библиотеку kotlinx-coroutines-coreв свой проект. В файле градиента вашего приложения (в проекте IntelliJ есть только один файл градиента или выберите файл градиента для приложения, если это проект Android), добавьте следующую строку:
dependencies {
testImplementation(kotlin("test-junit"))
implementation(kotlin("stdlib-jdk8"))
// add coroutine dependency
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2")
}
1. Используйте launchдля создания сопрограмм
Вот пример использования сопрограммы для выполнения длительной задачи в фоновом режиме:
import kotlinx.coroutines.*
fun main() {
// Start a coroutine using the launch function
val job = GlobalScope.launch {
// Perform a long-running task in the background
delay(1000L)
println("Hello, world!")
}
// Wait for the coroutine to finish
runBlocking {
job.join()
}
}
2. Используйте asyncдля создания сопрограмм
Вот пример использования сопрограмм в Kotlin для параллельного выполнения нескольких задач с последующим ожиданием их завершения:
import kotlinx.coroutines.*
fun main() {
// Start two coroutines using the async function
val job1 = GlobalScope.async {
// Perform a long-running task in the background
delay(1000L)
println("Task 1")
}
val job2 = GlobalScope.async {
// Perform a different long-running task in the background
delay(2000L)
println("Task 2")
}
// Wait for both coroutines to finish
runBlocking {
job1.await()
job2.await()
}
}
Разница между запуском и асинхронным запуском сопрограммы
Оба они обычно используются для запуска сопрограммы. Основное различие между ними заключается в том, что launchвозвращает задание (неблокирующее отменяемое будущее) и не возвращает результат, а asyncвозвращает отложенное (неблокирующее отменяемое будущее с результатом), которое можно использовать для получения результата сопрограмма. Учитывая разницу, когда следует использовать запуск и асинхронность для создания сопрограмм:
- Когда вы используете
launchфункцию, сопрограмма будет работать в фоновом режиме, и вызов функции немедленно вернется. Используется, когда результат сопрограммы не нужен. - Когда вы используете
asyncфункцию, сопрограмма также будет работать в фоновом режиме, и вызов функции немедленно завершится, но он вернет объект,Deferredдля которого вы можете вызвать функцию .await(), чтобы получить результат сопрограммы. Он используется, когда необходим результат сопрограммы. Например:
val result = GlobalScope.async {
return@async URL("https://api.example.com/data").readText()
}
val data = result.await()
println(data)
// output: {"fact":"A group of cats is called a \u201cclowder.\u201d","length":38}
Что еще отсюда? Как мы знаем, Coroutine — это большая тема, и лишь немногие могут объяснить ее полностью. Это первая статья из серии Coroutine. Если вы заинтересованы, пожалуйста, подпишитесь на следующие публикации на эту тему:
- Неблокировка в Kotlin Coroutines (поступит на этой неделе)
- Запуск и приостановка сопрограммы в Котлине (на этой неделе)
Первоначально опубликовано на https://needone.app 16 января 2023 г.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































