Inject a dispatcher provider instead of referencing `Dispatchers.IO` or another concrete dispatcher directly. ```kotlin interface DispatcherProvider { val main: CoroutineDispatcher val io: CoroutineDispatcher val default: CoroutineDispatcher } object DefaultDispatcherProvider : DispatcherProvider { override val main = Dispatchers.Main override val io = Dispatchers.IO override val default = Dispatchers.Default } class ItemsRepository( private val dispatchers: DispatcherProvider, ) { suspend fu...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill android-concurrency --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Android Concurrency?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-android-concurrency-743bd596)More formats (shields.io, HTML) on the badges page.
Inject a dispatcher provider instead of referencing `Dispatchers.IO` or another concrete dispatcher directly.
```kotlin
interface DispatcherProvider {
val main: CoroutineDispatcher
val io: CoroutineDispatcher
val default: CoroutineDispatcher
}
object DefaultDispatcherProvider : DispatcherProvider {
override val main = Dispatchers.Main
override val io = Dispatchers.IO
override val default = Dispatchers.Default
}
class ItemsRepository(
private val dispatchers: DispatcherProvider,
) {
suspend fun loadItems(): List<Item> = withContext(dispatchers.io) {
api.fetchItems()
}
}
```
Provide `DefaultDispatcherProvider` in production and a test implementation backed by `StandardTestDispatcher` in `runTest`:
```kotlin
@Test
fun loadsItems() = runTest {
val testDispatchers = object : DispatcherProvider {
override val main = StandardTestDispatcher(testScheduler)
override val io = StandardTestDispatcher(testScheduler)
override val default = StandardTestDispatcher(testScheduler)
}
val repository = ItemsRepository(testDispatchers)
// invoke the code under test, then advanceUntilIdle() as needed
}
```
This keeps coroutine scheduling deterministic and lets tests control execution without changing production code.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!