12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- public async Task<IResult> SetFileLabelsBatch([FromBody] RequestMultiFileSet req)
- {
- return await CreateResponseAsync(async () =>
- {
- Stopwatch sw = new Stopwatch();
- sw.Start();
- _log.LogWarning($"*** Start SetFileLabelsBatch: {req.files.Count} EA.");
- // Divide files into smaller batches (e.g., 10 files per batch)
- int batchSize = 10;
- var fileBatches = req.files.Select((file, index) => new { file, index })
- .GroupBy(x => x.index / batchSize)
- .Select(g => g.Select(x => x.file).ToList())
- .ToList();
- var tasks = new List<Task<List<ResponseFile>>>();
- foreach (var batch in fileBatches)
- {
- tasks.Add(ProcessFileBatchAsync(batch));
- }
- await Task.WhenAll(tasks);
- var result = tasks.SelectMany(t => t.Result).ToList();
- HttpContext.Items[GlobalConstants.API_RESULT_CODE] = 0;
- HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
- sw.Stop();
- _log.LogWarning($"*** ...End SetFileLabelsBatch: {req.files.Count} EA. {sw.ElapsedMilliseconds} ms.");
- return Results.Ok(new ApiResponseModel<List<ResponseFile>>()
- {
- success = true,
- errorCode = 0,
- errorMessage = GlobalConstants.API_RESULT_SUCCESS,
- result = result,
- });
- });
- }
- private async Task<List<ResponseFile>> ProcessFileBatchAsync(List<RequestFile> batch)
- {
- var tasks = batch.Select(obj =>
- {
- RequestFileSet reqSet = new RequestFileSet
- {
- apiKey = req.apiKey,
- email = req.email,
- decryptKey = req.decryptKey,
- aipGuid = req.aipGuid,
- comment = req.comment,
- file = new RequestFile
- {
- dispFileName = obj.dispFileName,
- realFileName = obj.realFileName,
- }
- };
- return _apiFileService.SetLabel(reqSet);
- });
- await Task.WhenAll(tasks);
- return tasks.Select(task => task.Result).ToList();
- }
|