tipsy
11/17/2017, 6:32 PMtipsy
11/17/2017, 6:32 PMdave
11/17/2017, 6:38 PMcedric
11/17/2017, 7:01 PMnoncom
11/23/2017, 4:06 PMnoncom
11/23/2017, 4:06 PMcy
11/23/2017, 4:32 PMnoncom
11/24/2017, 2:25 PMnoncom
11/24/2017, 2:25 PMnoncom
11/24/2017, 2:25 PMnoncom
11/24/2017, 2:26 PMnoncom
11/24/2017, 2:26 PMnoncom
11/24/2017, 2:33 PMnoncom
11/24/2017, 2:34 PMRavi Hasija
11/24/2017, 10:21 PMprivate suspend fun scanProjects(
projectMap: Map<String, String>,
projectRepos: List<ProjectRepo>,
runNumber: Long,
projectsScanned: Set<String>) {
launch {
projectMap.forEach { key, projectName ->
val allReposForProject = projectRepos.filter { it.projectKey.equals(key) }
async { processProject(key, projectName, allReposForProject, runNumber, projectsScanned) }.await()
}
}.join()
}
Causes: Kotlin: Suspension functions can be called only within coroutine body
#coroutinesHawk
11/24/2017, 11:37 PMsuspended
function, not a co-routine, suspended functions need to be called from within a co-routine. There are a few different ways to do that. Here is a simple example
val job = launch(CommonPool) {
val result = scanProjects(args....)
println("$result")
}
println("The result: ")
job.join() // join is a blocking call...
Hawk
11/24/2017, 11:38 PMscanProjects
method to run in a co-routineRavi Hasija
11/24/2017, 11:52 PMfun main() {
if (!run) {
logger.warn("Skipping AnalyzeDependencyRunner run...")
return
}
try {
val launch = launch(CommonPool) {
scanProjects(projectMap, projectRepos, runNumber, projectsScanned)
}
launch.join()
} catch (e: Exception) {
log.error(e)
}
}
What am I missing? If I try with runBlocking
above worksRavi Hasija
11/24/2017, 11:54 PMfun main() {
if (!run) {
logger.warn("Skipping AnalyzeDependencyRunner run...")
return
}
try {
runBlocking {
scanProjects(projectMap, projectRepos, runNumber, projectsScanned)
}
} catch (e: Exception) {
log.error(e)
}
}
Ravi Hasija
11/25/2017, 12:28 AMfun foo() {
async {
val i =1
}.await()
}
dave08
11/25/2017, 8:51 PMjoin
and await
also need to be run in a coroutine.. they are also suspending functions. See kotlinx.coroutines docs, everything is explaned there with good examples 🙂natpryce
11/28/2017, 2:26 PMhho
11/28/2017, 2:30 PMRavi Hasija
11/29/2017, 9:08 PMdave08
11/29/2017, 9:11 PMval heavyWorkerPool = newFixedThreadPoolContext(numberOfThreads, "heavy-worker")
Ravi Hasija
11/29/2017, 9:24 PMtwbarber
11/30/2017, 2:11 PMShawn
12/02/2017, 1:28 AMdave
12/04/2017, 1:10 PMcy
12/04/2017, 2:41 PM