public async Task <IReadOnlyList <IEnrichedAssetEntity> > GetReferencedAssetsAsync(IJsonValue value, TimeSpan cacheDuration, CancellationToken ct) { var ids = ParseIds(value); if (ids == null) { return(EmptyAssets); } async Task <IReadOnlyList <IEnrichedAssetEntity> > LoadAsync(IEnumerable <DomainId> ids) { var result = await GetAssetsLoader().LoadAsync(ids).GetResultAsync(ct); return(result?.NotNull().ToList() ?? EmptyAssets); } if (cacheDuration > TimeSpan.Zero) { var assets = await AssetCache.CacheOrQueryAsync(ids, async pendingIds => { return(await LoadAsync(pendingIds)); }, cacheDuration); return(assets); } return(await LoadAsync(ids)); }
public virtual async Task <IReadOnlyList <IEnrichedAssetEntity> > GetReferencedAssetsAsync(IEnumerable <DomainId> ids, CancellationToken ct) { Guard.NotNull(ids); return(await AssetCache.CacheOrQueryAsync(ids, async pendingIds => { await maxRequests.WaitAsync(ct); try { var q = Q.Empty.WithIds(pendingIds).WithoutTotal(); return await AssetQuery.QueryAsync(Context, null, q, ct); } finally { maxRequests.Release(); } })); }