public NodeSearchContext(IGraphNode <T> start, GraphNodeVisitationControl <T> visitTracker, NodeSearch <T> predicate) { Settings = visitTracker; StartingPoint = start; MoveTo(start); _watch = new DisposableStopwatch(); SearchBehavior = predicate; }
public bool PumpFor(TimeSpan fromSeconds) { using (var watch = new DisposableStopwatch()) { while (Pump()) { if (watch.Elapsed > fromSeconds) { break; } } } return(_backlog.HasWork); }
private async Task UpdateLadder(string leagueName) { Log($"Starting to fetch {leagueName} ladder"); await _repository.SetLadderRunning(leagueName); var ladder = new List <LadderPlayerModel>(); var sortModes = new List <string>() { null, "depth", "depthsolo" }; var pages = Enumerable.Range(0, 75); foreach (var sortMode in sortModes) { var sortNiceName = sortMode ?? "overall"; Log($"Using mode: {sortNiceName}"); foreach (int page in pages) { var interval = 1250; var elapsed = 0; using (var stopwatch = new DisposableStopwatch()) { LadderApiResponse result = await FetchLadderApiPage(leagueName, page, sortMode); if (result != null) { var LadderPlayerList = result.Entries. Where(t => !ladder.Any(x => x.Name == t.Character.Name)) .Select(t => new LadderPlayerModel(t)).ToList(); ladder.AddRange(LadderPlayerList); if (ladder.Count == result.Total || result.Entries.Count == 0) { break; } } else { await _repository.RemoveLadder(leagueName); break; } elapsed = (int)stopwatch.sw.ElapsedMilliseconds; if (interval > elapsed) { Task.Delay(interval - elapsed).Wait(); } } } } if (ladder.Count > 0) { ladder = CalculateStatistics(ladder); await _repository.UpdateLadder(leagueName, ladder); } Log($"Finished fetching {leagueName} ladder."); Log($"--------------------------------------"); }
public static IDisposableWrapper <DisposableStopwatch> WrapStopwatch(this DisposableStopwatch disposableStopwatch) { return(new StopWatchDisposableWrapper(disposableStopwatch)); }