private async Task <Tuple <TaskResultStatus, bool> > DownloadFiles(IEnumerable <DownloadFile> downloadList) { return(await Task.Run(async() => { var retryCount = 0; await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadThread, null) .ConfigureAwait(false); if (!_needRetry) { return new Tuple <TaskResultStatus, bool>(TaskResultStatus.Success, false); } while (_retryFileList.Any() && retryCount < TotalRetry) { foreach (var rF in _retryFileList) { rF.RetryCount++; } var tempList = _retryFileList; await DownloadHelper.AdvancedDownloadListFile(tempList, DownloadThread, null, DownloadParts) .ConfigureAwait(false); retryCount++; } var flag = _retryFileList.Any(rF => rF.FileType.Equals("Library/Native", StringComparison.Ordinal)); var resultType = _retryFileList.Any() ? TaskResultStatus.PartialSuccess : TaskResultStatus.Success; return new Tuple <TaskResultStatus, bool>(resultType, flag); }).ConfigureAwait(false)); }
private async Task <Tuple <TaskResultStatus, bool> > DownloadFiles(IEnumerable <DownloadFile> downloadList) { var retryFileList = new List <DownloadFile>(); var retryCount = 0; var needRetry = false; if (TotalRetry != 0) { DownloadFileCompletedEvent += (sender, args) => { if (args.Success) { return; } retryFileList.Add(args.File); needRetry = true; } } ; return(await Task.Run(async() => { if (retryCount == 0) { await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadThread, null) .ConfigureAwait(false); } if (!needRetry) { return new Tuple <TaskResultStatus, bool>(TaskResultStatus.Success, false); } while (retryFileList.Any() && retryCount <= TotalRetry) { foreach (var rF in retryFileList) { rF.RetryCount++; } var tempList = retryFileList; await DownloadHelper.AdvancedDownloadListFile(tempList, DownloadThread, null).ConfigureAwait(false); retryCount++; } var flag = retryFileList.Any(rF => rF.FileType.Equals("Library", StringComparison.Ordinal)); var resultType = retryFileList.Any() ? TaskResultStatus.PartialSuccess : TaskResultStatus.Success; return new Tuple <TaskResultStatus, bool>(resultType, flag); }).ConfigureAwait(false)); }
private async Task <ValueTuple <TaskResultStatus, ResourceCompleterCheckResult?> > DownloadFiles(IEnumerable <DownloadFile> downloadList) { await DownloadHelper.AdvancedDownloadListFile(downloadList, DownloadParts); var leftRetries = TotalRetry; var fileBag = new ConcurrentBag <DownloadFile>(_retryFiles); while (!fileBag.IsEmpty && leftRetries >= 0) { _retryFiles.Clear(); TotalDownloaded = 0; NeedToDownload = fileBag.Count; var files = fileBag.Select(f => (DownloadFile)f.Clone()).ToList(); fileBag.Clear(); foreach (var file in files) { file.RetryCount++; file.Completed = WhenCompleted; } await DownloadHelper.AdvancedDownloadListFile(files); fileBag = new ConcurrentBag <DownloadFile>(_retryFiles); leftRetries--; } var isLibraryFailed = fileBag.Any(f => f.FileType.Equals("Library/Native", StringComparison.OrdinalIgnoreCase)); var resultType = fileBag.IsEmpty ? TaskResultStatus.Success : TaskResultStatus.PartialSuccess; if (isLibraryFailed) { resultType = TaskResultStatus.Error; } return(resultType, new ResourceCompleterCheckResult { IsLibDownloadFailed = isLibraryFailed }); }