Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
6 views4 pages

Coroutine Building Blocks

The document outlines the fundamental building blocks of Kotlin coroutines, including CoroutineScope, Coroutine Context, Suspension Functions, Channels, Flows, and Coroutine Builders like launch, async, and runBlocking. It emphasizes the importance of these components in writing efficient asynchronous code. Additionally, it explains how suspending functions operate within coroutines, enabling non-blocking execution.

Uploaded by

Rayan Eqbal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views4 pages

Coroutine Building Blocks

The document outlines the fundamental building blocks of Kotlin coroutines, including CoroutineScope, Coroutine Context, Suspension Functions, Channels, Flows, and Coroutine Builders like launch, async, and runBlocking. It emphasizes the importance of these components in writing efficient asynchronous code. Additionally, it explains how suspending functions operate within coroutines, enabling non-blocking execution.

Uploaded by

Rayan Eqbal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

Coroutine Building Blocks

Assistant:
In Kotlin, coroutines provide a way to write asynchronous and non-blocking code.
Understanding the building blocks for coroutines is essential to effectively use
them in your projects. Here are the main components used to work with Kotlin
coroutines:

### 1. CoroutineScope
Defines a scope for new coroutines. Any coroutine launched in this scope will be
cancelled when the scope is canceled.

import kotlinx.coroutines.*

fun main() = runBlocking {


launch {
delay(1000L)
println("Coroutine executed")
}
println("Hello,")
}

### 2. Coroutine Context


Defines the context for the coroutine, including its job, dispatcher, and any other
properties.

- **Job:** Handles the lifecycle, cancellation, and parent-child relationship of


coroutines.
- **Dispatcher:** Determines the thread on which the coroutine’s code will run.
Common dispatchers include `Dispatchers.Default`, `Dispatchers.IO`, and
`Dispatchers.Main`.

```kotlin
val scope = CoroutineScope(Dispatchers.Default)
```

### 3. Suspension Functions


Functions that can be paused and resumed later. They can only be called from within
a coroutine or another suspending function.

```kotlin
suspend fun fetchData(): String {
delay(1000L) // simulates a network call
return "Data fetched"
}
```

### 4. Channels
Allow communication between coroutines.

```kotlin
import kotlinx.coroutines.channels.Channel

fun main() = runBlocking {


val channel = Channel<Int>()
launch {
for (x in 1..5) channel.send(x * x)
channel.close()
}
for (y in channel) println(y)
}
```

### 5. Flows
Represent a stream of values that are asynchronously computed.

```kotlin
import kotlinx.coroutines.flow.*

fun simpleFlow(): Flow<Int> = flow {


for (i in 1..3) {
delay(100)
emit(i)
}
}

fun main() = runBlocking {


simpleFlow().collect { value -> println(value) }
}
```

### 6. Builders
- `launch`: Launches a new coroutine without blocking the current thread.
- `async`: Launches a new coroutine and returns a Deferred<T> to retrieve the
result.
- `runBlocking`: Creates a new coroutine and blocks the current thread until its
completion.

```kotlin
fun main() = runBlocking {
val job = launch {
// some async work
}
job.join() // wait for job to complete
}
```

These building blocks are fundamental when working with coroutines in Kotlin,
allowing you to write efficient asynchronous code.

User:
launch: Starts a new coroutine without blocking the current thread.
async: Starts a new coroutine and returns a Deferred that represents the future
result.
runBlocking: Blocks the current thread until the coroutine completes.
Suspending Functions
Functions that include the suspend keyword and can suspend the execution of
coroutines.

Assistant:
Absolutely, those are crucial concepts when working with coroutines in Kotlin.
Let's break down and elaborate on each of them:

### Coroutine Builders


#### 1. `launch`
Starts a new coroutine without blocking the current thread. It returns a `Job` that
can be used to manage the coroutine, such as to cancel it or wait for its
completion.

```kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {


val job = launch {
// some long-running work
delay(1000L)
println("Coroutine with launch")
}
println("Hello,")
job.join() // Waits for the coroutine to complete
println("World!")
}
```

#### 2. `async`
Starts a new coroutine and returns a `Deferred<T>` that represents a future result.
This allows you to perform concurrent tasks and wait for their results.

```kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {


val deferred: Deferred<Int> = async {
// some concurrent work
delay(1000L)
42
}
println("The answer is: ${deferred.await()}") // Suspends until the result is
available
}
```

#### 3. `runBlocking`
Blocks the current thread until the coroutine inside it completes. This is
generally used in main functions for running suspending code.

```kotlin
import kotlinx.coroutines.*

fun main() {
runBlocking {
delay(1000L)
println("runBlocking Coroutine")
}
println("Done")
}
```

### Suspending Functions

These are functions that can suspend the execution of a coroutine without blocking
the thread. They are marked with the `suspend` keyword and can only be called from
other suspending functions or within a coroutine.
```kotlin
suspend fun doSomething() {
delay(1000L) // Simulate some work
println("Suspending function")
}

// Usage within a coroutine


fun main() = runBlocking {
doSomething()
}
```

### Summary
- **`launch`**: Starts a new coroutine without blocking the current thread. It
returns a `Job` that can be managed.
- **`async`**: Starts a new coroutine and returns a `Deferred` that represents a
future result.
- **`runBlocking`**: Blocks the current thread until the coroutine completes.
- **Suspending Functions**: Functions marked with the `suspend` keyword that can
suspend the execution of coroutines without blocking threads, enabling smooth
asynchronous operations.

Understanding these concepts helps in writing efficient, non-blocking, asynchronous


code in Kotlin. If you have any specific scenarios or deeper questions about using
these coroutine features, feel free to ask!

You might also like