internal IAsyncResult BeginShutDown(AsyncCallback userCallback, object state) { ShutDownAsyncResult ar = new ShutDownAsyncResult(this, userCallback, state); bool firstTime = false; lock (_syncRoot) { if (_state < MusicOnHoldServerState.Terminating) { firstTime = true; this.UpdateState(MusicOnHoldServerState.Terminating); } else if (_state == MusicOnHoldServerState.Terminating) { _listOfShutDownAsyncResults.Add(ar); } else if (_state == MusicOnHoldServerState.Terminated) { ar.SetAsCompleted(null, true); } } if (firstTime) { ThreadPool.QueueUserWorkItem((waitState) => { var tempAr = waitState as ShutDownAsyncResult; tempAr.Process(); }, ar); } return(ar); }
internal void EndShutDown(IAsyncResult ar) { ShutDownAsyncResult result = ar as ShutDownAsyncResult; result.EndInvoke(); }