From 04b9d7d32a0e3f3921c92f64f71f675ec51b4730 Mon Sep 17 00:00:00 2001 From: Brandon Henricks <78803523+bluemodus-brandon@users.noreply.github.com> Date: Sun, 22 Sep 2024 14:33:27 -0400 Subject: [PATCH] Add cancellation tokens and improve null safety Enhanced `ProcessAsync` in `ContentQueryExecutor.cs` and `PageContentQueryExecutor.cs` to handle `cancellationToken` for better operation cancellation. Added `System.Diagnostics.CodeAnalysis` namespace and `[return: NotNull]` attribute in `PageContentQueryExecutor.cs` to improve nullability annotations. Modified return statement to return an empty list if `results` is null, preventing potential `NullReferenceException`. --- src/XperienceCommunity.DataContext/ContentQueryExecutor.cs | 2 +- .../PageContentQueryExecutor.cs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs b/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs index 4f5aece..f15ec25 100644 --- a/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs +++ b/src/XperienceCommunity.DataContext/ContentQueryExecutor.cs @@ -40,7 +40,7 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { foreach (var processor in _processors.OrderBy(x=> x.Order)) { - await processor.ProcessAsync(result); + await processor.ProcessAsync(result, cancellationToken); } } diff --git a/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs b/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs index 98a4241..7c82747 100644 --- a/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs +++ b/src/XperienceCommunity.DataContext/PageContentQueryExecutor.cs @@ -1,4 +1,5 @@ using System.Collections.Immutable; +using System.Diagnostics.CodeAnalysis; using CMS.ContentEngine; using CMS.Websites; using Microsoft.Extensions.Logging; @@ -22,6 +23,7 @@ public PageContentQueryExecutor(ILogger> logger, _processors = processors?.ToImmutableList(); } + [return: NotNull] public async Task> ExecuteQueryAsync(ContentItemQueryBuilder queryBuilder, ContentQueryExecutionOptions queryOptions, CancellationToken cancellationToken) { @@ -39,11 +41,11 @@ public async Task> ExecuteQueryAsync(ContentItemQueryBuilder quer { foreach (var processor in _processors.OrderBy(x => x.Order)) { - await processor.ProcessAsync(result); + await processor.ProcessAsync(result, cancellationToken); } } - return results; + return results ?? []; } catch (Exception ex) {