Example #1
0
        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));
        }
Example #2
0
        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();
                }
            }));
        }