private async Task Benchmark() { AlgorithmContainer currentAlgorithm = null; while (_benchmarkAlgorithmQueue.Count > 0) { try { if (_stopBenchmark.IsCancellationRequested) { break; } currentAlgorithm = _benchmarkAlgorithmQueue.Dequeue(); BenchmarkManager.AddToStatusCheck(Device, currentAlgorithm); await BenchmarkAlgorithm(currentAlgorithm); await Task.Delay(ConfigManager.GeneralConfig.MinerRestartDelayMS); if (_stopBenchmark.IsCancellationRequested) { break; } currentAlgorithm.IsReBenchmark = false; BenchmarkManager.StepUpBenchmarkStepProgress(); ConfigManager.CommitBenchmarksForDevice(Device); } catch (Exception e) { Logger.Error("BenchmarkHandler", $"Exception occurred in benchmark task: {e.Message}"); } } currentAlgorithm?.ClearBenchmarkPending(); var cancel = _stopBenchmark.IsCancellationRequested; // don't show unbenchmarked algos if user canceled var showFailed = _benchmarkFailedAlgo.Count > 0 && !cancel; var startMining = _startMiningAfterBenchmark && !cancel; BenchmarkManager.EndBenchmarkForDevice(Device, showFailed, startMining); }