private async Task TaskBackgroundWork(CashTask cashTask)
        {
            int      i         = 0;
            CashTask localTask = cashTask;

            _logger.LogInformation($"TaskWorker|INFO| Num=Start, TaskBackgroundWork(Id={localTask.Id}, Repeat={localTask.CountOfRepeating}) Thread(Name={Thread.CurrentThread.Name}, Id={Thread.CurrentThread.ManagedThreadId})|{DateTimeOffset.Now}");

            //для новой задачи необходимо пройти по всем guids
            if (localTask.State == TaskFlags.New)
            {
                //т.е пройти по всем Guids
                await TaskWork(localTask, null);

                localTask.State = TaskFlags.Working;
            }

            while (localTask.EndTime.ToLocalTime() > DateTime.Now)
            {
                await Task.Delay(localTask.CountOfRepeating * 1000);
                await TaskWork(localTask, DateTime.Now.AddSeconds(localTask.CountOfRepeating * -1));

                _logger.LogInformation($"TaskWorker|INFO| Num={i++}, TaskBackgroundWork(Id={localTask.Id}, Repeat={localTask.CountOfRepeating}) Thread(Name={Thread.CurrentThread.Name}, Id={Thread.CurrentThread.ManagedThreadId})|{DateTimeOffset.Now}");
            }

            localTask.State = TaskFlags.Done;
            _logger.LogInformation($"TaskWorker|INFO| Exit={i++}, TaskBackgroundWork(Id={localTask.Id}, Repeat={localTask.CountOfRepeating}) Thread(Name={Thread.CurrentThread.Name}, Id={Thread.CurrentThread.ManagedThreadId})|{DateTimeOffset.Now}");
        }
        private async Task TaskWork(CashTask cashTask, DateTime?dateTime)
        {
            List <string> guids = await GetGuidsAsync(dateTime);

            List <TextTaskResult> localTasksResults = new List <TextTaskResult>();

            //так лучше не делать. Как переписать?
            using (var scope = _scopeFactory.CreateScope())
            {
                TaskDbContext _context = scope.ServiceProvider.GetRequiredService <TaskDbContext>();

                var searchWords = _context.SearchWords.Where(x => x.IdTask == cashTask.Id).ToList();

                var unrealizedGuids = guids.Select(x => Guid.Parse(x));
                foreach (var guid in unrealizedGuids)
                {
                    try
                    {
                        //запрос в другой микросервис на работы по guid
                        FindService.Entities.WordMatches findResult = await _findClient.GetById(guid, cashTask.SearchWords);

                        string[] countWord = findResult.Quantity.Split(' ');

                        //записываем результат для этого guid в в локальную переменную
                        for (int i = 0; i < cashTask.SearchWords.Count; i++)
                        {
                            var IdWord = searchWords.First(x => x.Word == cashTask.SearchWords[i]).Id;

                            localTasksResults.Add(new TextTaskResult()
                            {
                                Id     = new Guid(),
                                IdTask = cashTask.Id,
                                IdText = guid,
                                IdWord = IdWord,
                                Count  = Int32.Parse(countWord[i])
                            });
                        }
                    }
                    catch (ApiException ex)
                    {
                        _logger.LogInformation($"TaskWorker|ERROR| Service FindService Ошибка опроса {ex.RequestMessage}. _findClient.GetById(new Guid({guid}), {cashTask.SearchWords}); |{DateTimeOffset.Now}");
                    }
                }
                if (localTasksResults.Count > 0)
                {
                    await _context.TextTaskResult.AddRangeAsync(localTasksResults);

                    await _context.SaveChangesAsync();
                }
            }
        }
Example #3
0
 public void cashTaskAdd(CashTask localcashTask)
 {
     cashTask.Add(localcashTask);
 }