У меня есть JSON документы в БД документов (~ 30 тыс. Документов), где каждый документ имеет уникальный идентификатор, например, AA123, AA124. Существует инструмент, который мы используем для извлечения этих документов из БД документов, где для каждого вызова GET-запроса установлено ограничение в 500 документов. Так что это должно go через 60 раз запросить GET для получения результата, который занимает некоторое время. Я стремлюсь оптимизировать этот процесс для быстрого выполнения этого (параллельного запуска потоков), чтобы я мог быстро получать данные. Ниже приведен пример кода того, как я извлекаю данные из БД на данный момент.
private int maxItemsPerCall = 500;
public override async Task<IEnumerable<docClass>> Getdocuments()
{
string accessToken = "token";
SearchResponse<docClass> docs = await db.SearchDocuments<docClass>(initialload, accessToken); //Gets top 500
List<docClass> routeRules = new List<docClass>();
routeRules.AddRange(docs.Documents);
var remainingCalls = (docs.TotalDocuments / maxItemsPerCall);
while (remainingCalls > 0 && docs.TotalDocuments > maxItemsPerSearch)
{
docs = await db.SearchDocuments<docClass>(GetFollowUp(docs.Documents.LastOrDefault().Id.Id), requestOptions);
routeRules.AddRange(docs.Documents);
remainingCalls--;
}
return routeRules;
}
private static SearchRequest initialload = new SearchRequest()
{
Filter = new SearchFilterGroup(
new[]
{
new SearchFilter(Field.Type, FilterOperation.Equal, "documentRule")
},
GroupOperator.And),
OrderBy = Field.Id,
Top = maxItemsPerCall,
Descending = false
};
private static SearchRequest GetFollowUp(string lastId)
{
SearchRequest followUpRequest = new SearchRequest()
{
Filter = new SearchFilterGroup(
new[] {
new SearchFilter(Field.Type, FilterOperation.Equal, "documentRule"),
new SearchFilter(Field.Id, FilterOperation.GreaterThan, lastId)
},
GroupOperator.And),
OrderBy = Field.Id,
Top = maxItemsPerCall,
};
return followUpRequest;
}
Требуется помощь: поскольку я использую каждый запрос GET (500 документов на основе идентификаторов в зависимости от идентификатора предыдущий запуск), как я могу использовать для параллельного запуска (по крайней мере 5 параллельных потоков за раз) выборки 500 записей на поток (то есть 2500 параллельных в общей сложности для 5 потоков одновременно). Я не знаком с потоками, поэтому было бы полезно, если бы кто-то мог подсказать, как это сделать.