/// <summary>
        /// Constructor.
        /// </summary>
        public ArbiterSlimActiveClientStub(IArbiterClient client)
        {
            _client = client;

            //_executionStrategy = new FrameworkThreadPoolExecutionStrategy(this);
            _executionStrategy = new ThreadPoolFastExecutionStrategy(this, true);

            Construct();
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public ArbiterSlimActiveClientStub(IArbiterClient client, ArbiterSlimExecutionStrategy executionStrategy)
        {
            _client            = client;
            _executionStrategy = executionStrategy;

            SystemMonitor.CheckThrow(executionStrategy != null, "Execution strategy not assigned.");

            Construct();
        }
        /// <summary>
        /// Receive an envelope for executing.
        /// </summary>
        /// <param name="canExecute">Can directly execute on this thread.</param>
        public bool Receive(Envelope envelope)
        {
            EnvelopeUpdateDelegate envelopeReceivedDelegate = EnvelopeReceivedEvent;

            if (envelopeReceivedDelegate != null)
            {
                envelopeReceivedDelegate(this, envelope);
            }

            ArbiterSlimExecutionStrategy executionStrategy = _executionStrategy;

            if (executionStrategy != null)
            {
                executionStrategy.Execute(envelope);
            }

            return(true);
        }