public void AddOrUpdate_ThrowsForNullAddHandlerFunc() { var exception = Assert.Throws <ArgumentNullException>( () => _handlers.AddOrUpdate( MessageMethod.Handshake, addHandlerFunc: null, updateHandlerFunc: oldHandler => oldHandler)); Assert.Equal("addHandlerFunc", exception.ParamName); }
public IDisposable RegisterNotification(NotificationRequest request, IObserver <NotificationResponse> observer) { try { if (_log.IsDebugEnabled) { _log.DebugFormat("Registering notification request: {0}", request.Id); foreach (var query in request.Queries) { _log.DebugFormat("Notification query: {0}, {1}", query.Name, query.Sql); } } lock (SynchLock) { if (RequestHandlers.Count == 0) { OnFirstSubscription(); } var requestObserver = new RequestObserver(observer); RequestHandlers.AddOrUpdate(request, requestObserver, (k, v) => requestObserver); Parallel.ForEach(request.Queries, query => { if (!_queryHandlers.ContainsKey(query.Name)) { try { lock (_queryHandlers) { T_Handler handler = new T_Handler(); handler.Initialise(this, query); _queryHandlers.Add(query.Name, handler); } } catch (Exception ex) { if (_log.IsErrorEnabled) { _log.ErrorFormat("Failed to register notification query: {0} for request: {1} - {2}", query.Name, request.Id, ex.Message); } } } var queryHandler = _queryHandlers[query.Name]; var subscription = queryHandler.Subscribe(Observer.Create <Notification>(OnQueryNotification)); request.Subscriptions.Add(subscription); }); } return(new Unsubscriber(this, request)); } catch (Exception ex) { if (_log.IsErrorEnabled) { _log.ErrorFormat("Failed to register notification request: {0} - {1}", request.Id, ex.Message); } throw ex; } }