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); }