Как ускорить асинхронную запись в потоке сервера gRP C на перечисляемом объекте в c#? - PullRequest
0 голосов
/ 29 апреля 2020

Я использую gRP C -сервис для моего проекта.

IEnumerable<Report> dbResult = _repository.GetReports();

Итак, dbResult - это объект, который сохраняет records. Хорошо. В моем сервисе реализован метод ответа, я хочу, чтобы запись в поток была максимально быстрой

public override async Task GetRecords(QueryParams request, IServerStreamWriter<RecordResponse> responseStream, ServerCallContext context)
{
   IEnumerable<Report> dbResult = _repository.GetReports();
   foreach (Record row in dbResult)
   {
      await responseStream.WriteAsync(new RecordResponse { ID = row.ID });
   }
}

На стороне клиента:

public async Task<IList<RecordResponse>> GetRecords()
        {
            try
            {
                var result = new List<RecordResponse>();
                var records = _client.GetRecords
                    (new QueryParams
                    {
                        Market = "STOCK"
                    }).ResponseStream;

                while (await records.MoveNext())
                {
                    result.Add(records.Current);
                }
                return result;
            }
            catch (Exception ex)
            {
                _logger.Error($"fail");
            }
            return null;
        }

И это работает не так быстро, как у меня ожидается. Я предполагаю, что сервер пытается асинхронно поместить в поток более 100000 записей, создав много ненужных потоков, что только задерживает работу. Как мне ускорить этот процесс?

...