C# Grpc Потоковая передача RPC на стороне сервера. Клиент получил первое сообщение только со вторым
Я пытаюсь реализовать потоковую передачу на стороне сервера rpc для отправки сообщений с сервера на клиент.
rpc CheckSystem(CheckSystemRequest) returns (stream CheckSystemResponse) {}
Код сервера:
public override Task CheckSystem(CheckSystemRequest request, IServerStreamWriter<CheckSystemResponse> responseStream, ServerCallContext context) {
return Task.Run(async () => {
for(int i = 1; i <= 10; i++) {
await responseStream.WriteAsync(new CheckSystemResponse { Type = i.ToString() });
Console.WriteLine($"{DateTime.Now}: Sent {i}");
Thread.Sleep(10000);
}
});
}
Код клиента:
public static async Task TestAsync() {
try {
using (var call = client.CheckSystem(new CheckSystemRequest { Code = "1" })) {
var responseStream = call.ResponseStream;
while (await responseStream.MoveNext()) {
var current = responseStream.Current;
Console.WriteLine($"{DateTime.Now}: Received: Type = {current.Type}");
}
}
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
После запуска вижу, что на стороне сервера сообщение отправляется каждые 10 секунд. Скриншот №1.
13.12.2019 **16:31:31**: Sent 1
13.12.2019 **16:31:41**: Sent 2
13.12.2019 16:31:51: Sent 3
13.12.2019 16:32:01: Sent 4
13.12.2019 16:32:11: Sent 5
13.12.2019 16:32:21: Sent 6
13.12.2019 16:32:31: Sent 7
13.12.2019 16:32:41: Sent 8
13.12.2019 16:32:51: Sent 9
13.12.2019 16:33:01: Sent 10
Но клиент начинает обрабатывать первое сообщение только после того, как сервер отправит второе. Скриншот #2
13.12.2019 **16:31:41**: Received: Type = 1
13.12.2019 **16:31:41**: Received: Type = 2
13.12.2019 16:31:51: Received: Type = 3
13.12.2019 16:32:01: Received: Type = 4
13.12.2019 16:32:11: Received: Type = 5
13.12.2019 16:32:21: Received: Type = 6
13.12.2019 16:32:31: Received: Type = 7
13.12.2019 16:32:41: Received: Type = 8
13.12.2019 16:32:51: Received: Type = 9
13.12.2019 16:33:01: Received: Type = 10
В чем может быть причина такого поведения? И как это исправить?