From 31ca6e66574fb60eb71184c7c1954ec1b80515e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Tue, 10 Mar 2026 14:57:39 +0300 Subject: [PATCH] Ensure JSON doc disposal in anonymous job handlers Wrap JsonDocument usage in explicit using blocks for anonymous job handlers to ensure deterministic disposal and avoid capturing/disposal issues. Also rename the compile-time handler parameter from `context` to `ctx` to prevent potential shadowing. Changes applied to DemoAppSharedModule.cs and SampleJobCreator.cs. --- .../DemoAppSharedModule.cs | 18 ++++++++++-------- .../Jobs/SampleJobCreator.cs | 16 +++++++++------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/DemoAppSharedModule.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/DemoAppSharedModule.cs index 07a8467350..7e9e4076ec 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/DemoAppSharedModule.cs +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/DemoAppSharedModule.cs @@ -15,16 +15,18 @@ namespace Volo.Abp.BackgroundJobs.DemoApp.Shared { Configure(options => { - options.AddAnonymousJobHandler("CompileTimeAnonymousJob", (context, ct) => + options.AddAnonymousJobHandler("CompileTimeAnonymousJob", (ctx, ct) => { - using var doc = JsonDocument.Parse(context.JsonData); - var value = doc.RootElement.TryGetProperty("value", out var prop) - ? prop.GetString() - : doc.RootElement.TryGetProperty("Value", out prop) + using (var doc = JsonDocument.Parse(ctx.JsonData)) + { + var value = doc.RootElement.TryGetProperty("value", out var prop) ? prop.GetString() - : null; - Console.WriteLine($"[ANONYMOUS-COMPILE] {value}"); - return Task.CompletedTask; + : doc.RootElement.TryGetProperty("Value", out prop) + ? prop.GetString() + : null; + Console.WriteLine($"[ANONYMOUS-COMPILE] {value}"); + return Task.CompletedTask; + } }); }); } diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs index e64b681f44..8fa6c1af88 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs @@ -28,14 +28,16 @@ namespace Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs { _anonymousJobHandlerRegistry.Register("RuntimeAnonymousJob", (context, ct) => { - using var doc = JsonDocument.Parse(context.JsonData); - var value = doc.RootElement.TryGetProperty("value", out var prop) - ? prop.GetString() - : doc.RootElement.TryGetProperty("Value", out prop) + using (var doc = JsonDocument.Parse(context.JsonData)) + { + var value = doc.RootElement.TryGetProperty("value", out var prop) ? prop.GetString() - : null; - Console.WriteLine($"[ANONYMOUS-RUNTIME] {value}"); - return Task.CompletedTask; + : doc.RootElement.TryGetProperty("Value", out prop) + ? prop.GetString() + : null; + Console.WriteLine($"[ANONYMOUS-RUNTIME] {value}"); + return Task.CompletedTask; + } }); // Type-safe enqueue (existing)