From 375441721d0c44fd8c1b5b809cfb4b5ca0dac126 Mon Sep 17 00:00:00 2001 From: OISHI Masakuni Date: Sun, 31 Jul 2022 15:22:09 +0900 Subject: [PATCH] Launch SendMessage coroutine with `CoroutineStart.UNDISPATCHED`. Especially, this improves performance when the current dispatcher is `Dispatchers.Main`. --- stub/src/main/java/io/grpc/kotlin/ClientCalls.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stub/src/main/java/io/grpc/kotlin/ClientCalls.kt b/stub/src/main/java/io/grpc/kotlin/ClientCalls.kt index 3dce6967..3c07e47c 100644 --- a/stub/src/main/java/io/grpc/kotlin/ClientCalls.kt +++ b/stub/src/main/java/io/grpc/kotlin/ClientCalls.kt @@ -22,13 +22,13 @@ import io.grpc.MethodDescriptor import io.grpc.Status import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.cancel import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.onFailure import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -309,7 +309,10 @@ object ClientCalls { headers.copy() ) - val sender = launch(CoroutineName("SendMessage worker for ${method.fullMethodName}")) { + val sender = launch( + context = CoroutineName("SendMessage worker for ${method.fullMethodName}"), + start = CoroutineStart.UNDISPATCHED + ) { try { request.sendTo(clientCall, readiness) clientCall.halfClose()