Exemple #1
0
 public void SetOpened()
 {
     _state = ConcurrentOpenState.Opened;
     Parallel.ForEach(_callBacks, (callback) => callback());
     _callBacks.Clear();
     _callBacks = null;
 }
Exemple #2
0
        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);
                        }
                    }
                }
            }
        }