public void Dispose()
        {
            _cancellationTokenSource?.Cancel();

            if (OnSessionTermination != null)
            {
                var invocationList = OnSessionTermination?.GetInvocationList();

                foreach (var item in invocationList)
                {
                    OnSessionTermination -= (SessionTermination)item;
                }
            }

            _task?.Dispose();
            _producerConsumerQueue?.Dispose();
            _cancellationTokenSource?.Dispose();
        }
        private void NotifyAboutTermination()
        {
            var @event = new SessionTerminationEvent(this.SessionId);

            OnSessionTermination?.Invoke(@event);
        }