/// <summary>
        /// Consuming - transfer file
        /// </summary>
        /// <param name="job">Queue Item</param>
        private void JobExecuteSwitch( IQuickIOTransferJob job )
        {
            OnJobDequeued( job );

            job.CurrentRetryCount++;

            try
            {
                job.Run( );
            }
            catch ( Exception e )
            {
                // Retry count reached?!
                if ( job.CurrentRetryCount >= _maxJobRetryAttempts )
                {
                    OnJobRetryMaxReached( job, e );
                    return;
                }

                // Increase retry count and re-add to the queue
                job.CurrentRetryCount++;
                lock ( _jobQueueLock )
                {
                    // on empty queue just add
                    if ( _jobQueue.Count == 0 )
                    {
                        _jobQueue.Add( job );
                    }

                        // Check for cancellation token 'null'
                    else if ( _jobQueue.Contains( null ) )
                    {
                        // Queue has cancellation token at last position
                        _jobQueue.Insert( _jobQueue.Count - 2, job );
                    }
                    else
                    {
                        _jobQueue.Insert( _jobQueue.Count - 1, job );
                    }

                    InternalReSortLockedQueue( ); // resort queue
                }

                OnJobRequeued( job, e );
            }
        }