private async Task <DeferToken> GetMetadataFromRemoteSourcesAsync(DeferToken token, CancellationToken cancellationToken) { bool prerelease = _settignsProvider.Model.IsPreReleaseIncluded; var searchMetadata = await _packageMetadataProvider.GetPackageMetadataAsync(token.Package.Identity, prerelease, cancellationToken); token.Result = searchMetadata; return(token); }
#pragma warning disable CL0002 // Use async suffix private Task <DeferToken> CreateTaskFromToken(DeferToken token, CancellationToken cancellationToken) { bool prerelease = _settignsProvider.Model.IsPreReleaseIncluded; if (token.LoadType == MetadataOrigin.Installed) { //from local return(GetMetadataFromLocalSourcesAsync(token, cancellationToken)); } return(GetMetadataFromRemoteSourcesAsync(token, cancellationToken)); }
/// <summary> /// Get installed local metadata based on package.config /// </summary> /// <param name="token"></param> /// <param name="cancellationToken"></param> /// <returns></returns> private async Task <DeferToken> GetMetadataFromLocalSourcesAsync(DeferToken token, CancellationToken cancellationToken) { var project = _projectProvider.GetDefaultProject(); string packageId = token.Package.Identity.Id; if (project is null) { return(token); } var installedVersion = await _projectManager.GetVersionInstalledAsync(project, packageId, cancellationToken); if (installedVersion is null) { return(token); } var metadata = await _packageMetadataProvider.GetLocalPackageMetadataAsync(new PackageIdentity(packageId, installedVersion), true, cancellationToken); token.Result = metadata; return(token); }
private async Task RunTaskExecutionLoopAsync() { try { var processedTask = _taskTokenList.ToList(); _taskTokenList.Clear(); _packageMetadataProvider = InitializeMetadataProvider(); if (_packageMetadataProvider is null) { Log.Info("Cannot acquire metadata provider for background loading tasks"); return; } using (var cts = new CancellationTokenSource()) { _aliveCancellationToken = cts.Token; #pragma warning disable IDISP013 // Await in using. var taskList = processedTask.ToDictionary(x => CreateTaskFromToken(x, _aliveCancellationToken)); #pragma warning restore IDISP013 // Await in using. Log.Info($"Start updating {_taskTokenList.Count} items in background"); while (taskList.Any()) { var nextCompletedTask = await Task.WhenAny(taskList.Keys); PackageStatus updateStateValue; IPackageSearchMetadata result = null; DeferToken executedToken = null; try { executedToken = await nextCompletedTask; result = executedToken?.Result; } catch (Exception ex) { Log.Error(ex, "Package loading background task failed, cannot get result"); } finally { taskList.Remove(nextCompletedTask); } if (result is not null) { updateStateValue = await NuGetPackageCombinator.CombineAsync(executedToken.Package, executedToken.LoadType, result); } else { updateStateValue = PackageStatus.NotInstalled; } executedToken?.UpdateAction(updateStateValue); } } } catch (Exception ex) { Log.Error(ex, "Background loading task was failed"); } finally { //todo try to complete all remaining tasks _isLoading = false; } }
public void Add(DeferToken token) { _taskTokenList.Add(token); }