public void FilteredEventSourceTest() { const int _bufferSize = 10; List <EventEntry> _lastEvent = new List <EventEntry>(); ObservableEventListener _listener = new ObservableEventListener(); IDisposable _subscription = _listener. FlushOnTrigger(entry => entry.Schema.Level <= EventLevel.Error, bufferSize: _bufferSize). Subscribe(x => _lastEvent.Add(x)); using (SinkSubscription <ObservableEventListener> _sink = new SinkSubscription <ObservableEventListener>(_subscription, _listener)) { _sink.Sink.EnableEvents(SemanticEventSource.Log, EventLevel.LogAlways, Keywords.All); SemanticEventUser _logUser = new SemanticEventUser(); _logUser.LongDataProcessing(); Assert.AreEqual <int>(_bufferSize + 1, _lastEvent.Count); } }
static void UsingRxFiltering() { // Configure the observable listener. var listener = new ObservableEventListener(); listener.EnableEvents(MyCompanyEventSource.Log, EventLevel.LogAlways, Keywords.All); // Use the custom filter extension method (see the ObservableHelper class). // If an message of level Error is received, send it and the two previous // information messages to the console. listener .FlushOnTrigger(entry => entry.Schema.Level <= EventLevel.Error, bufferSize: 2) .LogToConsole(); Console.WriteLine("Sending 20 informational messages and one error message."); for (int i = 0; i < 20; i++) { MyCompanyEventSource.Log.DBQueryStart("select... (query #" + i); } MyCompanyEventSource.Log.DBQueryError(231); Console.WriteLine("Only the last two information messages and the error message get sent to the console sink."); listener.Dispose(); }