private static void NTPThread() { try { while (true) { DateTime newNTPTime = GetNetworkTime(ntpHost); long ntpStamp = GetTimestamp(); timeLock.DoLocked(() => { ntpTime = newNTPTime; ntpQueryStamp = ntpStamp; }); Interlocked.Increment(ref numQueries); Thread.Sleep(TimeSpan.FromMinutes(2)); } } catch (Exception ex) { Log.Error("NTP query thread: " + ex); } }
public int Filter(Func <string, object, bool> filter) { int removed = 0; filterLock.DoLocked(() => { try { Queue <Tuple <string, object> > temp = new Queue <Tuple <string, object> >(); Tuple <string, object> tmp; while (dispatch.TryDequeue(out tmp)) { if (filter(tmp.Item1, tmp.Item2)) { temp.Enqueue(tmp); } else { removed++; } } while (temp.Count > 0) { dispatch.Enqueue(temp.Dequeue()); } while (sent.TryDequeue(out tmp)) { if (filter(tmp.Item1, tmp.Item2)) { temp.Enqueue(tmp); } else { removed++; } } while (temp.Count > 0) { sent.Enqueue(temp.Dequeue()); } //leave sem as is, allow null result of GetNext() } catch (Exception) { } }); return(removed); }
private async Task PollAsync(CancellationToken cancellationToken = default(CancellationToken)) { try { var header = await store.Documents.HeadAsync(ID, null, cancellationToken); if (cancellationToken.IsCancellationRequested || !header.IsSuccess) { return; } if (Latest == null || header.Rev != Latest._rev) { var data = await GetConflictResolvedAsync(store, ID, Merger, cancellationToken); if (cancellationToken.IsCancellationRequested || data == null) { return; //try again later } sl.DoLocked(() => { Log.Minor("Got new data on " + this + ": rev " + header.Rev); //if (lastQueriedValue == null) // anyValueAsync.SetResult(data); Latest = data; OnChange?.Invoke(data); Action <T> next; while (onGet.TryTake(out next)) { next(data); } }); } } catch (TaskCanceledException) {} }