/// <summary> /// 删除节点事件监听 /// </summary> /// <param name="path">节点path</param> /// <param name="dataListener">监听对象</param> public void UnSubscribeNodeChanges(string path, IZKNodeListener dataListener) { this._nodeListeners.TryGetValue(path, out ConcurrentHashSet <IZKNodeListener> listeners); listeners?.TryRemove(dataListener); if (listeners != null && !listeners.IsEmpty) { return; } _nodeListeners.TryRemove(path, out ConcurrentHashSet <IZKNodeListener> _listeners); }
/// <summary> /// 添加节点事件监听 /// </summary> /// <param name="path">节点path</param> /// <param name="listener">监听对象</param> public void SubscribeNodeChanges(string path, IZKNodeListener listener) { this._nodeListeners.TryGetValue(path, out ConcurrentHashSet <IZKNodeListener> listeners); if (listeners == null) { listeners = new ConcurrentHashSet <IZKNodeListener>(); this._nodeListeners.TryAdd(path, listeners); } listeners.TryAdd(listener); Task.Run(async() => { await WatchForDataAsync(path); }).ConfigureAwait(false).GetAwaiter().GetResult(); _logHandler.Info($"Subscribed node changes for {path}"); }