public UploadWholeFileTask(UploadInfo file, IUploadProgressReporter progressReporter, IApiHelper apiHelper)
			: base(apiHelper)
		{
			_file = file;
			_filePath = file.FilePath;
			_progressReporter = progressReporter;
		}
		public UploadWholeFileTask(UploadInfo file, string filePath, IApiHelper apiHelper)
			: base(apiHelper)
		{
			_file = file;
			_filePath = filePath;
			_progressReporter = null;
		}
		public UploadFilesTask(JobInfo jobInfo, IUploadProgressReporter progressReporter, CancellationToken token, IApiHelper apiHelper)
			: base(apiHelper)
		{
			_jobInfo = jobInfo;
			_progressReporter = progressReporter;
			_token = token;
		}
		public UploadFileChunksTask(string filePath, long fileSize, DeckCloudFileResponse response, CancellationToken token, IApiHelper apiHelper)
			: base(apiHelper)
		{
			_file = null;
			_filePath = filePath;
			_fileSize = fileSize;
			_progressReporter = null;
			_token = token;
			_deckCloudFileResponse = response;
		}
		public UploadFileChunksTask(UploadInfo file, IUploadProgressReporter progressReporter, CancellationToken token, IApiHelper apiHelper)
			: base(apiHelper)
		{
			_file = file;
			_filePath = file.FilePath;
			_fileSize = file.FileSize;
			_progressReporter = progressReporter;
			_token = token;
			_deckCloudFileResponse = file.DeckCloudFileResponse;
		}
		public EstimateFileTransferTimeTask(int bufferSize, JobInfo jobInfo, CancellationToken token, IUploadProgressReporter progressReporter, IApiHelper apiHelper)
			: base( apiHelper)
		{
			_jobInfo = jobInfo;
			_progressReporter = progressReporter;
			_token = token;

			byte[] random = new byte[bufferSize];
			new Random().NextBytes(random);
			
			var tempDir = CreateTempDirectory();
			_tempFilePath = Path.Combine(tempDir, "uploadtest.dat");
			_tempFileSize = random.Length;
			using (var upStream = new FileStream(_tempFilePath, FileMode.Create))
			{
				upStream.Write(random, 0, random.Length);
			}
		}