public async Task <IActionResult> BatchAnalysev2([FromBody] BatchAnalysisRequest request) { try { if (!ValidateBatchAnalysis(request)) { return(BadRequest()); } var response = new BatchAnalysisResponse { Items = new List <AnalysisResponseItem>(), Id = request.Id }; var tranformBlock = new TransformBlock <ConfiguredAnalysisRequestItem, AnalysisResponseItem>((Func <ConfiguredAnalysisRequestItem, Task <AnalysisResponseItem> >)UnsafeAnalyseAsyncv2, new ExecutionDataflowBlockOptions { BoundedCapacity = ExecutionDataflowBlockOptions.Unbounded, MaxDegreeOfParallelism = 100 }); var actionBlock = new ActionBlock <AnalysisResponseItem>(i => { response.Items.Add(i); }, new ExecutionDataflowBlockOptions { BoundedCapacity = ExecutionDataflowBlockOptions.Unbounded, }); tranformBlock.LinkTo(actionBlock, new DataflowLinkOptions { PropagateCompletion = true, }); foreach (var item in request.Items) { await tranformBlock.SendAsync(item); } tranformBlock.Complete(); await actionBlock.Completion; return(Ok(response)); } catch (Exception ex) { _logger.Error(ex, "Unexpected fail when analysing sentence: {id}, {request}", request.Id, request); return(StatusCode((int)HttpStatusCode.InternalServerError, ex)); } }
private bool ValidateBatchAnalysis(BatchAnalysisRequest request) { return(request != null && request.Items != null && request.Items.Count > 0 && !string.IsNullOrEmpty(request.Id)); }