/// <summary>
        /// dispose of managed resources
        /// </summary>
        /// <param name="disposing">true if being disposed</param>
        protected void Dispose(bool disposing)
        {
            if (!disposing)
            {
                return;
            }

            if (_isDisposed)
            {
                return;
            }
            lock (_syncObject)
            {
                if (_isDisposed)
                {
                    return;
                }
                _isDisposed = true;
            }

            Debug.Assert(_runspace != null, "Runspace is already null");

            CloseAndDisposeRunspace();

            _processInstance.Dispose();

            _currentInvoker = null;
            _tracer.Dispose();

            _perfCountersMgr.UpdateCounterByValue(
                PSWorkflowPerformanceCounterSetInfo.CounterSetId,
                PSWorkflowPerformanceCounterIds.ActivityHostMgrDisposedProcessesCount);
        }