Exemple #1
0
 private static UserIterationFinished LogIteration(IIterationResultRepository iterationResultRepository)
 {
     return(iterationResult =>
     {
         // in a task so it doesnt slow down the user execution
         Task.Run(() => iterationResultRepository.Save(iterationResult));
     });
 }
        private async Task SaveFromQueue(CancellationToken stoppingToken, bool runAll = false)
        {
            Stopwatch runAllStopwatch = null;

            if (runAll)
            {
                runAllStopwatch = new Stopwatch();
                runAllStopwatch?.Restart();
            }

            var count = _queue.Count;

            for (var i = 0; i < count; i++)
            {
                if (stoppingToken.IsCancellationRequested)
                {
                    return;
                }

                if (_queue.TryDequeue(out var result))
                {
                    try
                    {
                        await _iterationResultRepository.Save(result);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($"{_name} - {e.Message}");
                    }

                    if (runAll && runAllStopwatch.ElapsedMilliseconds > 1000)
                    {
                        runAllStopwatch.Restart();
                        Console.WriteLine($"{_queue.Count} remaining..");
                    }
                }
            }

            runAllStopwatch?.Stop();
        }
        private async ValueTask <int> SaveFromQueue(CancellationToken stoppingToken)
        {
            if (stoppingToken.IsCancellationRequested)
            {
                return(0);
            }

            var result = await _queue.DequeueAsync(stoppingToken, 1500);

            if (result == null)
            {
                return(0);
            }

            await _transaction.Begin();

            var i = 0;

            foreach (var item in result)
            {
                try
                {
                    await _iterationResultRepository.Save(item);

                    i++;
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Failed {nameof(SaveFromQueue)} {_name}");
                    Console.WriteLine(e);
                }
            }

            await _transaction.Commit();

            return(i);
        }