public void SetOpened() { _state = ConcurrentOpenState.Opened; Parallel.ForEach(_callBacks, (callback) => callback()); _callBacks.Clear(); _callBacks = null; }
public void Open(Action callBack, Action executeOpen) { if (_state == ConcurrentOpenState.Opened) { callBack(); } else { lock (_lock) { if (_state == ConcurrentOpenState.Opened) { callBack(); } else { if (_state == ConcurrentOpenState.Closed) { _callBacks = new List <Action> { callBack }; _state = ConcurrentOpenState.Openning; executeOpen(); } else { _callBacks.Add(callBack); } } } } }