diff --git a/src/XperienceCommunity.DataContext/ContentItemContext.cs b/src/XperienceCommunity.DataContext/ContentItemContext.cs index 5e91d3e..6ac4c77 100644 --- a/src/XperienceCommunity.DataContext/ContentItemContext.cs +++ b/src/XperienceCommunity.DataContext/ContentItemContext.cs @@ -63,6 +63,8 @@ public ContentItemContext(IWebsiteChannelContext websiteChannelContext, public async Task FirstOrDefaultAsync(Expression> predicate, CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + var queryBuilder = BuildQuery(predicate, topN: 1); var queryOptions = CreateQueryOptions(); @@ -134,6 +136,8 @@ public IDataContext Take(int count) /// A task that represents the asynchronous operation. The task result contains the content items. public async Task> ToListAsync(CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + ValidateQuery(); var queryBuilder = BuildQuery(_query?.Expression!); diff --git a/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs b/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs index f15ec25..d2699c2 100644 --- a/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs +++ b/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs @@ -26,6 +26,8 @@ public ContentQueryExecutor(ILogger> logger, IContentQue public async Task> ExecuteQueryAsync(ContentItemQueryBuilder queryBuilder, ContentQueryExecutionOptions queryOptions, CancellationToken cancellationToken) { + cancellationToken.ThrowIfCancellationRequested(); + try { var results = await _queryExecutor.GetMappedResult(queryBuilder, queryOptions, @@ -40,6 +42,8 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { foreach (var processor in _processors.OrderBy(x=> x.Order)) { + cancellationToken.ThrowIfCancellationRequested(); + await processor.ProcessAsync(result, cancellationToken); } } diff --git a/src/XperienceCommunity.DataContext/PageContentContext.cs b/src/XperienceCommunity.DataContext/PageContentContext.cs index fc4afcc..0e7b5de 100644 --- a/src/XperienceCommunity.DataContext/PageContentContext.cs +++ b/src/XperienceCommunity.DataContext/PageContentContext.cs @@ -45,6 +45,8 @@ public PageContentContext(IProgressiveCache cache, PageContentQueryExecutor p public async Task FirstOrDefaultAsync(Expression> predicate, CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + var queryBuilder = BuildQuery(predicate, topN: 1); var queryOptions = CreateQueryOptions(); @@ -121,6 +123,8 @@ public IDataContext Take(int count) [return: NotNull] public async Task> ToListAsync(CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + ValidateQuery(); var queryBuilder = BuildQuery(_query?.Expression!); diff --git a/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs b/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs index 7c82747..5bb1169 100644 --- a/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs +++ b/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs @@ -29,6 +29,8 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { try { + cancellationToken.ThrowIfCancellationRequested(); + var results = await _queryExecutor.GetMappedWebPageResult(queryBuilder, queryOptions, cancellationToken: cancellationToken); @@ -41,6 +43,8 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { foreach (var processor in _processors.OrderBy(x => x.Order)) { + cancellationToken.ThrowIfCancellationRequested(); + await processor.ProcessAsync(result, cancellationToken); } } diff --git a/src/XperienceCommunity.DataContext/ReusableSchemaContext.cs b/src/XperienceCommunity.DataContext/ReusableSchemaContext.cs index b8f8b06..44b74f1 100644 --- a/src/XperienceCommunity.DataContext/ReusableSchemaContext.cs +++ b/src/XperienceCommunity.DataContext/ReusableSchemaContext.cs @@ -57,6 +57,8 @@ public ReusableSchemaContext(IWebsiteChannelContext websiteChannelContext, public async Task FirstOrDefaultAsync(Expression> predicate, CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + var queryBuilder = BuildQuery(predicate, 1); var queryOptions = CreateQueryOptions(); @@ -126,7 +128,10 @@ public IDataContext Take(int count) /// A task that represents the asynchronous operation. The task result contains the content items. public async Task> ToListAsync(CancellationToken cancellationToken = default) { + cancellationToken.ThrowIfCancellationRequested(); + ValidateQuery(); + var queryBuilder = BuildQuery(_query?.Expression!); var queryOptions = CreateQueryOptions(); diff --git a/src/XperienceCommunity.DataContext/ReusableSchemaExecutor.cs b/src/XperienceCommunity.DataContext/ReusableSchemaExecutor.cs index cd8fe60..23f9200 100644 --- a/src/XperienceCommunity.DataContext/ReusableSchemaExecutor.cs +++ b/src/XperienceCommunity.DataContext/ReusableSchemaExecutor.cs @@ -23,6 +23,8 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { try { + cancellationToken.ThrowIfCancellationRequested(); + var results = await _queryExecutor.GetMappedResult(queryBuilder, queryOptions, cancellationToken: cancellationToken);