public async Task <LibraryDependencyInfo> GetDependenciesAsync( LibraryIdentity match, NuGetFramework targetFramework, SourceCacheContext cacheContext, ILogger logger, CancellationToken cancellationToken) { AsyncLazy <LibraryDependencyInfo> result = null; var action = new AsyncLazy <LibraryDependencyInfo>(async() => await GetDependenciesCoreAsync(match, targetFramework, cacheContext, logger, cancellationToken)); var key = new LibraryRangeCacheKey(match, targetFramework); if (cacheContext.RefreshMemoryCache) { result = _dependencyInfoCache.AddOrUpdate(key, action, (k, v) => action); } else { result = _dependencyInfoCache.GetOrAdd(key, action); } return(await result); }
/// <summary> /// Asynchronously gets package dependencies. /// </summary> /// <param name="libraryIdentity">A library identity.</param> /// <param name="targetFramework">A target framework.</param> /// <param name="cacheContext">A source cache context.</param> /// <param name="logger">A logger.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result (<see cref="Task{TResult}.Result" />) returns a <see cref="LibraryDependencyInfo" /> /// instance.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="libraryIdentity" /> /// is either <c>null</c> or empty.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="targetFramework" /> /// is either <c>null</c> or empty.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="cacheContext" /> /// is either <c>null</c> or empty.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="logger" /> /// is either <c>null</c> or empty.</exception> /// <exception cref="OperationCanceledException">Thrown if <paramref name="cancellationToken" /> /// is cancelled.</exception> public async Task <LibraryDependencyInfo> GetDependenciesAsync( LibraryIdentity libraryIdentity, NuGetFramework targetFramework, SourceCacheContext cacheContext, ILogger logger, CancellationToken cancellationToken) { if (libraryIdentity == null) { throw new ArgumentNullException(nameof(libraryIdentity)); } if (targetFramework == null) { throw new ArgumentNullException(nameof(targetFramework)); } if (cacheContext == null) { throw new ArgumentNullException(nameof(cacheContext)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } cancellationToken.ThrowIfCancellationRequested(); AsyncLazy <LibraryDependencyInfo> result = null; var action = new AsyncLazy <LibraryDependencyInfo>(async() => await GetDependenciesCoreAsync(libraryIdentity, targetFramework, cacheContext, logger, cancellationToken)); var key = new LibraryRangeCacheKey(libraryIdentity, targetFramework); if (cacheContext.RefreshMemoryCache) { result = _dependencyInfoCache.AddOrUpdate(key, action, (k, v) => action); } else { result = _dependencyInfoCache.GetOrAdd(key, action); } return(await result); }