Я использую 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 записей, создав много ненужных потоков, что только задерживает работу. Как мне ускорить этот процесс?