// everything is within Dispatchers.Io context commonDependency { suspend fun fetchResult() { log ("fetching result...") // get from some async source return result } } useCaseA { suspend fun execute() { return commonDependency.getResult()?.also { /* do something */ } } } useCaseB { suspend fun execute() { return commonDependency.getResult()?.also { /* do something */ } } } fun main() { useCaseA.execute() useCaseB.execute() } result behavior: fetching result... fetching result... :useCaseA finished execution :useCaseB finished execution wanted behavior: fetching result... :useCaseA finished execution :useCaseB finished execution