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(); } } }
public void cashTaskAdd(CashTask localcashTask) { cashTask.Add(localcashTask); }