Claude-skill-registry coroutines-kotlin
Master Kotlin coroutines with suspend functions, flows, channels, and structured concurrency for building async applications.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/coroutines-kotlin" ~/.claude/skills/majiayu000-claude-skill-registry-coroutines-kotlin && rm -rf "$T"
manifest:
skills/data/coroutines-kotlin/SKILL.mdsource content
Kotlin Coroutines
Master asynchronous programming in Kotlin with coroutines, flows, and structured concurrency.
Core Concepts
Basic Coroutine
fun main() = runBlocking { launch { delay(1000L) println("World!") } println("Hello") }
Suspend Functions
suspend fun fetchUser(id: String): User { delay(1000) // Simulating network call return User(id, "John Doe") } fun main() = runBlocking { val user = fetchUser("123") println(user) }
Async/Await
suspend fun loadData(): Data = coroutineScope { val user = async { fetchUser() } val posts = async { fetchPosts() } Data(user.await(), posts.await()) }
Flow
fun simpleFlow(): Flow<Int> = flow { for (i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { simpleFlow().collect { value -> println(value) } }
Channels
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) }
Best Practices
- Use structured concurrency
- Handle exceptions properly
- Use flows for streams
- Leverage coroutine scope
- Use dispatchers appropriately
- Avoid GlobalScope
- Test coroutines properly