public TaskRunner CreateUpdateModifiedDateTaskRunner(CloudBlob blob, FileInformation fileInfo)
		{
			this._statistics.UpdatedModifiedDateCount++;
			return new SingleActionTaskRunner(() =>
			{
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 0));
				blob.SetFileLastModifiedUtc(fileInfo.LastWriteTimeUtc, true);
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 1));
			});
		}
		public override TaskRunner CreateBlobNotExistsTaskRunner(CloudBlobContainer blobContainer, FileInformation fileInfo)
		{
			this._statistics.BlobNotExistCount++;
			return new SingleActionTaskRunner(() =>
			{
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 0));
				_fileSystem.DeleteFile(fileInfo.FullPath);
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 1));
			});
		}
		public TaskRunner CreateUpdateTaskRunner(CloudBlob blob, FileInformation fileInfo)
		{
			this._statistics.UpdatedCount++;
			return new SingleActionTaskRunner(() =>
			{
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 0));
				blob.DownloadToFile(fileInfo.FullPath);
				_fileSystem.SetLastWriteTimeUtc(fileInfo.FullPath, blob.GetFileLastModifiedUtc());
				_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 1));
			});
		}
		public TaskRunner CreateUpdateTaskRunner(CloudBlob blob, FileInformation fileInfo)
		{
			this._statistics.UpdatedCount++;
			if (fileInfo.SizeInBytes > CloudBlobConstants.FileSizeThresholdInBytes)
			{
				return new UploadLargeFileTaskRunner(_messageBus, _fileSystem, fileInfo, blob);
			}
			else
			{
				return new SingleActionTaskRunner(() =>
				{
					_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 0));
					blob.UploadFile(fileInfo);
					_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 1));
				});
			}
		}
		public TaskRunner CreateBlobNotExistsTaskRunner(CloudBlobContainer blobContainer, FileInformation fileInfo)
		{
			this._statistics.BlobNotExistCount++;
			if (fileInfo.SizeInBytes > CloudBlobConstants.FileSizeThresholdInBytes)
			{
				return new UploadLargeFileTaskRunner(_messageBus, _fileSystem, fileInfo, blobContainer);
			}
			else
			{
				return new SingleActionTaskRunner(() =>
				{
					_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 0));
					CloudBlob blob = blobContainer.GetBlobReference(fileInfo.BlobName);
					blob.UploadFile(fileInfo);
					_messageBus.Publish(new FileProgressedMessage(fileInfo.FullPath, 1));
				});
			}
		}
		public TaskRunner CreateBlobNotExistsTaskRunner(CloudBlobContainer blobContainer, FileInformation fileInfo)
		{
			this._statistics.BlobNotExistCount++;
			return new EmptyTaskRunner();
		}
		public TaskRunner CreateUpdateModifiedDateTaskRunner(CloudBlob blob, FileInformation fileInfo)
		{
			this._statistics.UpdatedModifiedDateCount++;
			return new EmptyTaskRunner();
		}
		public static void UploadFile(this CloudBlob blob, FileInformation fileInfo)
		{
			blob.SetFileLastModifiedUtc(fileInfo.LastWriteTimeUtc, false);
			blob.UploadFile(fileInfo.FullPath);
		}
		public virtual TaskRunner CreateBlobNotExistsTaskRunner(CloudBlobContainer blobContainer, FileInformation fileInfo)
		{
			return new EmptyTaskRunner();
		}