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); }