public void StopStream(Exception exception, IDisconnectMessage disconnectMessage = null)
        {
            lock (_lockStream)
            {
                StopStreamAndUnsubscribeFromEvents();

                if (exception is ITwitterTimeoutException && disconnectMessage == null)
                {
                    disconnectMessage = new DisconnectMessage
                    {
                        Code = 503,
                        Reason = "Timeout"
                    };
                }

                var streamExceptionEventArgs = new StreamExceptionEventArgs(exception, disconnectMessage);
                this.Raise(StreamStopped, streamExceptionEventArgs);
            }
        }
        private void StreamTaskStateChanged(object sender, GenericEventArgs<StreamState> args)
        {
            var streamState = args.Value;
            switch (streamState)
            {
                case StreamState.Resume:
                    this.Raise(StreamResumed);
                    break;
                case StreamState.Pause:
                    this.Raise(StreamPaused);
                    break;
                case StreamState.Stop:
                    StreamExceptionEventArgs streamExceptionEventArgs;

                    var streamTask = _currentStreamTask;

                    if (streamTask != null)
                    {
                        streamExceptionEventArgs = new StreamExceptionEventArgs(streamTask.LastException);
                    }
                    else
                    {
                        streamExceptionEventArgs = new StreamExceptionEventArgs(null);
                    }

                    this.Raise(StreamStopped, streamExceptionEventArgs);
                    break;
            }
        }