public bool PassFilter(StationYear stationYear) { GetObservable(); if (_task.IsCompleted) { DateTime now = DateTime.Now; if (_task.Result.LastUpdated.HasValue) { if (_task.Result.LastUpdated.Value.Year < stationYear.Year) { return(true); } } else { if (stationYear.Year == now.Year) { return(true); } } return(_task.Result.StationYearBloom.ContainsKey(stationYear)); } return(true); }
private Tuple <StationYear, int> ParseLine(string line) { if (!line.StartsWith("\"") || !line.EndsWith("\"")) { throw new NotSupportedException("station inventory csv bad"); } line = line.Substring(1, line.Length - 2); string[] lineElements = line.Split(new[] { "\",\"" }, StringSplitOptions.None); if (lineElements.Length != 15) { throw new NotSupportedException("station inventory csv bad"); } var stationYear = new StationYear { StationIdentifier = new StationIdentifier { UsafId = int.Parse(lineElements[0]), WbanId = int.Parse(lineElements[1]) }, Year = int.Parse(lineElements[2]) }; int count = 0; for (int i = 3; i < 15; i++) { count += int.Parse(lineElements[i]); } return(new Tuple <StationYear, int>(stationYear, count)); }
private Task <WeatherCollection> GetObservable(StationYear stationYear, int priority) { Task <WeatherCollection> retval; lock (_collectionLock) { StationYearRequest stationYearRequest; TaskCompletionSource <WeatherCollection> weatherCollection; if (_cache.TryGetValue(stationYear, out weatherCollection)) { retval = weatherCollection.Task; if (retval.IsCompleted && retval.Result.NeedsToRevalidate()) { stationYearRequest = new StationYearRequest(); stationYearRequest.Priority = priority; stationYearRequest.RequestTime = DateTime.Now; stationYearRequest.StationYear = stationYear; stationYearRequest.LastRun = retval.Result; var subject = new TaskCompletionSource <WeatherCollection>(); _cache[stationYear] = subject; _queue.Add(stationYearRequest); _queueIndex[stationYear] = stationYearRequest; retval = subject.Task; } else { if (_queueIndex.TryGetValue(stationYear, out stationYearRequest) && stationYearRequest.Priority > priority) { _queue.Remove(stationYearRequest); stationYearRequest.Priority = priority; _queue.Add(stationYearRequest); _queueIndex[stationYear] = stationYearRequest; } } } else { stationYearRequest = new StationYearRequest(); stationYearRequest.Priority = priority; stationYearRequest.RequestTime = DateTime.Now; stationYearRequest.StationYear = stationYear; var subject = new TaskCompletionSource <WeatherCollection>(); _cache[stationYear] = subject; _queue.Add(stationYearRequest); _queueIndex[stationYear] = stationYearRequest; retval = subject.Task; } } _readyEvent.Set(); return(retval); }
public void Prefetch(StationYear stationYear, int priority) { GetObservable(stationYear, priority); }
public WeatherCollection Get(StationYear stationYear) { return(GetObservable(stationYear, -1).Result); }