== Why is this an issue? There are two ways to define asynchronous functions in Kotlin: * using the modifier `suspend` in the function declaration * creating an extension function on `CoroutineScope` (or passing it as a parameter) The `suspend` modifier is generally used for functions that might take some time to complete. The caller coroutine might be potentially suspended. Functions that return results immediately but start a coroutine in the background should be written as extension functions on `CoroutineScope`. At the same time, these functions should not be declared `suspend`, as suspending functions should not leave running background tasks behind. === Noncompliant code example [source,kotlin] ---- suspend fun CoroutineScope.f(): Int { val resource1 = loadResource1() val resource2 = loadResource2() return resource1.size + resource2.size } ---- === Compliant solution Using `suspend`: [source,kotlin] ---- suspend fun f(): Int { val resource1 = loadResource1() val resource2 = loadResource2() return resource1.size + resource2.size } ---- Using extension on `CoroutineScope`: [source,kotlin] ---- fun CoroutineScope.f(): Deferred = async { val resource1 = loadResource1() val resource2 = loadResource2() resource1.size + resource2.size } ---- == Resources * https://elizarov.medium.com/coroutine-context-and-scope-c8b255d59055[Coroutine Context and Scope]