コード例 #1
0
        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));
            }
        }
コード例 #2
0
 private bool ValidateBatchAnalysis(BatchAnalysisRequest request)
 {
     return(request != null && request.Items != null && request.Items.Count > 0 && !string.IsNullOrEmpty(request.Id));
 }