asad.awadia
01/31/2019, 2:45 AMgildor
01/31/2019, 2:49 AMasad.awadia
01/31/2019, 2:49 AMgildor
01/31/2019, 2:49 AMasad.awadia
01/31/2019, 2:50 AMbdawg.io
01/31/2019, 2:53 AMsuspend
is preferred for your function implementations. If inside another function, you want to use two other suspend functions concurrently, then you should use async
for that. suspend fun foo(): Int { ... }
suspend fun bar(): Int { ... }
suspend fun doSomething() = coroutineScope {
val fooAsync = async { foo() }
val barAsync = async { bar() }
foo.await() + bar.await()
}
gildor
01/31/2019, 3:02 AMgroostav
01/31/2019, 3:04 AMfoo
and bar
are concurrent by virtue of being suspend
. If you write the code foo(); bar();
, then you run them sequentially, but they are still concurrent, because they do not do anything at suspension points.
what you are actually looking for is "how do I run foo
and bar
_in parallel_". In kotlinx.coroutines, you must be explicit when you want to run things in parallel, and the typical way you do that is with async
.bdawg.io
01/31/2019, 3:17 AMfoo()
and bar()
are dispatched at the same time. They might not be executing in parallel (ie, a single-thread dispatcher), but they are concurrent. If you explicitly run them sequentially via foo(); bar();
, then you would not be running them concurrently because are explicitly ensuring that bar()
does not run until after foo()
has completedasync
coroutines depends on having enough threads for each coroutine to occupy.asad.awadia
01/31/2019, 12:56 PM