Ejemplo n.º 1
0
        private async void QueryForTasks(ActionBlock <OutputJob> actionBlockQueue, CancellationToken cancellationToken)
        {
            var tasks = await _resultsService.GetPendingJobs(cancellationToken, 10);

            if (tasks == null || tasks.Count == 0)
            {
                return;
            }
            _logger.LogInformation("Found {0} tasks from Results Service...", tasks.Count);

            var       invalidTasks = new List <TaskResponse>();
            OutputJob outputJob    = null;

            foreach (var task in tasks)
            {
                try
                {
                    outputJob = CreateOutputJobFromTask(task);
                }
                catch (System.Exception ex)
                {
                    _logger.LogError("Error creating export task for {0}: {1}", task.TaskId, ex);
                    invalidTasks.Add(task);
                    continue;
                }

                try
                {
                    actionBlockQueue.Post(outputJob);
                    _logger.LogInformation("Export task {0} queued", task.TaskId);
                }
                catch (System.Exception ex)
                {
                    _logger.LogError("Error queueing task {0}: {1}", outputJob.TaskId, ex);
                    //do nothing, will try again on next query.
                }
            }

            if (invalidTasks.Any())
            {
                ReportFailures(invalidTasks, cancellationToken);
            }
        }