Перейти к содержанию

Серверный поток

Вот пример вызова GetAll() с асинхронным чтением серверного потока, доступом к заголовкам и трейлерам. Заголовки читаются при помощи свойства ResponseHeadersAsync (асинхронного), а трейлеры — при помощи синхронного метода GetTrailers(). Трейлеры необходимо читать после завершения чтения потока, заголовки можно прочесть до завершения чтения.

async Task GetAll(CountryServiceClient client, ILogger logger)
{
    using var serverStreamingCall = client.GetAll(new Empty());
    await foreach (var response in serverStreamingCall.ResponseStream.ReadAllAsync())
    {
        logger.LogInformation($"{response.Name}: {response.Description}");
    }
    //Читаем заголовки и трейлеры, сериализуем в JSON и пишем в лог
    var serverStreamingCallHeaders = await serverStreamingCall.ResponseHeadersAsync;
    logger.LogInformation($"Headers:{Environment.NewLine}{JsonSerializer.Serialize(serverStreamingCallHeaders, new JsonSerializerOptions { WriteIndented = true })}");

    var serverStreamingCallTrailers = serverStreamingCall.GetTrailers();
    logger.LogInformation($"Trailers:{Environment.NewLine}{JsonSerializer.Serialize(serverStreamingCallTrailers, new JsonSerializerOptions { WriteIndented = true })}");
}


Последнее обновление : 24 июня 2023 г.
Дата создания : 23 апреля 2023 г.

Комментарии

Комментарии