Browse Source

Fully async

pull/65/head
Sebastian Stehle 9 years ago
parent
commit
b24078ff75
  1. 4
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/GraphQLModel.cs
  2. 24
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/QueryContext.cs

4
src/Squidex.Domain.Apps.Read/Contents/GraphQL/GraphQLModel.cs

@ -103,7 +103,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
var context = (QueryContext)c.UserContext; var context = (QueryContext)c.UserContext;
var contentIds = c.Source.GetOrDefault(c.FieldName); var contentIds = c.Source.GetOrDefault(c.FieldName);
return context.GetReferencedAssets(contentIds); return context.GetReferencedAssetsAsync(contentIds);
}); });
return (assetListType, resolver); return (assetListType, resolver);
@ -124,7 +124,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
var context = (QueryContext)c.UserContext; var context = (QueryContext)c.UserContext;
var contentIds = c.Source.GetOrDefault(c.FieldName); var contentIds = c.Source.GetOrDefault(c.FieldName);
return context.GetReferencedContents(schemaId, contentIds); return context.GetReferencedContentsAsync(schemaId, contentIds);
}); });
var schemaFieldType = new ListGraphType(new NonNullGraphType(GetSchemaType(schemaId))); var schemaFieldType = new ListGraphType(new NonNullGraphType(GetSchemaType(schemaId)));

24
src/Squidex.Domain.Apps.Read/Contents/GraphQL/QueryContext.cs

@ -48,7 +48,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
if (asset == null) if (asset == null)
{ {
asset = await assetRepository.FindAssetAsync(id); asset = await assetRepository.FindAssetAsync(id).ConfigureAwait(false);
if (asset != null) if (asset != null)
{ {
@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
if (content == null) if (content == null)
{ {
content = await contentRepository.FindContentAsync(app, schemaId, id); content = await contentRepository.FindContentAsync(app, schemaId, id).ConfigureAwait(false);
if (content != null) if (content != null)
{ {
@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
public async Task<IReadOnlyList<IContentEntity>> QueryContentsAsync(Guid schemaId, string query) public async Task<IReadOnlyList<IContentEntity>> QueryContentsAsync(Guid schemaId, string query)
{ {
var contents = await contentRepository.QueryAsync(app, schemaId, false, null, query); var contents = await contentRepository.QueryAsync(app, schemaId, false, null, query).ConfigureAwait(false);
foreach (var content in contents) foreach (var content in contents)
{ {
@ -100,22 +100,20 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
return contents; return contents;
} }
public List<IAssetEntity> GetReferencedAssets(JToken value) public Task<IReadOnlyList<IAssetEntity>> GetReferencedAssetsAsync(JToken value)
{ {
var ids = ParseIds(value); var ids = ParseIds(value);
return GetReferencedAssets(ids); return GetReferencedAssetsAsync(ids);
} }
public List<IAssetEntity> GetReferencedAssets(ICollection<Guid> ids) public async Task<IReadOnlyList<IAssetEntity>> GetReferencedAssetsAsync(ICollection<Guid> ids)
{ {
Guard.NotNull(ids, nameof(ids)); Guard.NotNull(ids, nameof(ids));
var notLoadedAssets = new HashSet<Guid>(ids.Where(id => !cachedAssets.ContainsKey(id))); var notLoadedAssets = new HashSet<Guid>(ids.Where(id => !cachedAssets.ContainsKey(id)));
if (notLoadedAssets.Count > 0) if (notLoadedAssets.Count > 0)
{
Task.Run(async () =>
{ {
var assets = await assetRepository.QueryAsync(app.Id, null, notLoadedAssets, null, int.MaxValue).ConfigureAwait(false); var assets = await assetRepository.QueryAsync(app.Id, null, notLoadedAssets, null, int.MaxValue).ConfigureAwait(false);
@ -123,28 +121,25 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
{ {
cachedAssets[asset.Id] = asset; cachedAssets[asset.Id] = asset;
} }
}).Wait();
} }
return ids.Select(id => cachedAssets.GetOrDefault(id)).Where(x => x != null).ToList(); return ids.Select(id => cachedAssets.GetOrDefault(id)).Where(x => x != null).ToList();
} }
public List<IContentEntity> GetReferencedContents(Guid schemaId, JToken value) public Task<IReadOnlyList<IContentEntity>> GetReferencedContentsAsync(Guid schemaId, JToken value)
{ {
var ids = ParseIds(value); var ids = ParseIds(value);
return GetReferencedContents(schemaId, ids); return GetReferencedContentsAsync(schemaId, ids);
} }
public List<IContentEntity> GetReferencedContents(Guid schemaId, ICollection<Guid> ids) public async Task<IReadOnlyList<IContentEntity>> GetReferencedContentsAsync(Guid schemaId, ICollection<Guid> ids)
{ {
Guard.NotNull(ids, nameof(ids)); Guard.NotNull(ids, nameof(ids));
var notLoadedContents = new HashSet<Guid>(ids.Where(id => !cachedContents.ContainsKey(id))); var notLoadedContents = new HashSet<Guid>(ids.Where(id => !cachedContents.ContainsKey(id)));
if (notLoadedContents.Count > 0) if (notLoadedContents.Count > 0)
{
Task.Run(async () =>
{ {
var contents = await contentRepository.QueryAsync(app, schemaId, false, notLoadedContents, null).ConfigureAwait(false); var contents = await contentRepository.QueryAsync(app, schemaId, false, notLoadedContents, null).ConfigureAwait(false);
@ -152,7 +147,6 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL
{ {
cachedContents[content.Id] = content; cachedContents[content.Id] = content;
} }
}).Wait();
} }
return ids.Select(id => cachedContents.GetOrDefault(id)).Where(x => x != null).ToList(); return ids.Select(id => cachedContents.GetOrDefault(id)).Where(x => x != null).ToList();

Loading…
Cancel
Save