Esempio n. 1
0
        internal IAsyncResult BeginShutDown(AsyncCallback userCallback, object state)
        {
            ShutDownAsyncResult ar = new ShutDownAsyncResult(this, userCallback, state);

            bool firstTime = false;

            lock (_syncRoot)
            {
                if (_state < SupervisorSessionState.Terminating)
                {
                    this.UpdateState(SupervisorSessionState.Terminating);
                    firstTime = true;
                }
                else if (_state == SupervisorSessionState.Terminating)
                {
                    _listOfShutDownAsyncResults.Add(ar);
                }
                else if (_state == SupervisorSessionState.Terminated)
                {
                    ar.SetAsCompleted(null, true);
                }
            }

            if (firstTime)
            {
                ThreadPool.QueueUserWorkItem((waitState) =>
                {
                    ShutDownAsyncResult tempAr = waitState as ShutDownAsyncResult;
                    tempAr.Process();
                }, ar);
            }

            return(ar);
        }