hmole
10/31/2018, 3:51 PMzip
) with coroutines. Api calls are Deferred<T>
with retrofit-coroutines-adapter
. But they don't seem to execute in parallel. What am I doing wrong?hmole
10/31/2018, 3:51 PMmp
10/31/2018, 3:52 PMmp
10/31/2018, 3:52 PMhmole
10/31/2018, 3:53 PMawaitAll
?mp
10/31/2018, 3:55 PMval worfklows = fsApi.workflows()
val foo = ...
...
Result(workflows.await(), foo.await(), ...)
mp
10/31/2018, 3:56 PMhmole
10/31/2018, 3:58 PM18:57:06.406 GET 200 1733ms <http://example.com/workflows>
18:57:07.916 GET 200 1479ms <http://example.com/issues/types>
18:57:09.250 GET 200 1326ms <http://example.com/issues/statuses>
mp
10/31/2018, 3:59 PMmp
10/31/2018, 3:59 PMmp
10/31/2018, 4:00 PMmp
10/31/2018, 4:00 PMhmole
10/31/2018, 4:05 PMJonathan
10/31/2018, 4:27 PMmp
10/31/2018, 4:31 PMJonathan
10/31/2018, 4:31 PMsuspend fun FsApi.loadWorkflows(): List<Workflow> { ... }
suspend fun FsApi.loadTypes(): List<IssueType> { ... }
suspend fun FsApi.loadStatuses(): List<IssueStatus> { ... }
suspend fun loadFsData(): Result = coroutineScope {
val workflows = async { fsApi.loadWorkflows() }
val types = async { fsApi.loadTypes() }
val statuses = async { fsApi.loadStatuses() }
Result(workflows.await(), types.await(), statuses.await())
}
Jonathan
10/31/2018, 4:32 PMasync
it is about suspend
which makes asynchronous code way much simpler that futures or rxjava 😉mp
10/31/2018, 4:33 PMJonathan
10/31/2018, 4:35 PMmp
10/31/2018, 4:40 PM.asDeferred()
Jonathan
10/31/2018, 4:41 PMsuspend fun loadFsData(): Result {
val workflows = fsApi.workflows().asDeferred()
val types = fsApi.types().asDeferred()
val statuses = fsApi.statuses().asDeferred()
return Result(workflows.await(), types.await(), statuses.await())
}
Jonathan
10/31/2018, 4:44 PMJonathan
10/31/2018, 4:45 PMDeferred
instead of being suspending function, which is a bit sad.Jonathan
10/31/2018, 4:45 PMJonathan
10/31/2018, 4:47 PMsuspend fun loadFsData(): Result {
val workflows = fsApi.workflows()
val types = fsApi.types()
val statuses = fsApi.statuses()
return Result(workflows.await(), types.await(), statuses.await())
}
dekans
10/31/2018, 5:33 PMZach Klippenstein (he/him) [MOD]
11/01/2018, 6:25 PMsuspend
function support is a WIP: https://github.com/square/retrofit/pull/2886