private bool ScheduleSubDirectoryTransfer(
            SubDirectoryTransfer subDirectoryTransfer,
            CancellationToken cancellationToken,
            Action persistDirTransfer,
            int timeOut)
        {
            Interlocked.Increment(ref this.outstandingTasks);
            Task directoryListTask = null;

            try
            {
                directoryListTask = DirectoryListingScheduler.Instance().Schedule(
                    subDirectoryTransfer,
                    cancellationToken,
                    persistDirTransfer,
                    timeOut);
            }
            catch (OperationCanceledException)
            {
                // Ignore exception
            }
            catch (ObjectDisposedException)
            {
                // Ignore exception
            }

            this.WaitOnSubDirectoryListTask(directoryListTask, subDirectoryTransfer);
            return(null != directoryListTask);
        }