From 0f9bd7f46581d2fb1f8dbe9b14b8d170df14a206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sat, 9 May 2026 04:07:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=8F=96=E6=B6=88=E4=BB=A4=E7=89=8C=E4=BC=A0=E9=80=92?= =?UTF-8?q?=E5=B9=B6=E9=9B=86=E4=B8=AD=E7=AE=A1=E7=90=86=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E4=BB=A4=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在任务执行时,不再从调用方传递 CancellationContext 的令牌,而是在 GearTaskExecutor 内部统一创建和管理链接的取消令牌。这简化了调用方的代码,并确保了取消令牌的正确生命周期管理。 --- .../Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs | 5 +---- .../Service/GearTask/GearTaskExecutor.cs | 10 ++++++++-- .../ViewModel/Pages/GearTaskListPageViewModel.cs | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs b/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs index fce5793a..37879dfd 100644 --- a/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs +++ b/BetterGenshinImpact/Model/Gear/Triggers/QuartzJob/QuartzGearTaskJob.cs @@ -1,8 +1,6 @@ using System; -using System.Threading; using System.Threading.Tasks; using System.Windows; -using BetterGenshinImpact.Core.Script; using BetterGenshinImpact.GameTask; using BetterGenshinImpact.Service; using BetterGenshinImpact.Service.GearTask; @@ -55,8 +53,7 @@ public class QuartzGearTaskJob : IJob } var executor = App.GetRequiredService(); - using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(context.CancellationToken, CancellationContext.Instance.GetActiveToken()); - await executor.ExecuteTaskDefinitionAsync(taskDefinitionName, linkedCts.Token); + await executor.ExecuteTaskDefinitionAsync(taskDefinitionName, context.CancellationToken); _logger.LogInformation("触发器 {TriggerName} 的任务定义执行完成", triggerName); } diff --git a/BetterGenshinImpact/Service/GearTask/GearTaskExecutor.cs b/BetterGenshinImpact/Service/GearTask/GearTaskExecutor.cs index d8df8e16..9fb84fbe 100644 --- a/BetterGenshinImpact/Service/GearTask/GearTaskExecutor.cs +++ b/BetterGenshinImpact/Service/GearTask/GearTaskExecutor.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Threading; using System.Threading.Tasks; +using BetterGenshinImpact.Core.Script; +using BetterGenshinImpact.GameTask; using BetterGenshinImpact.Model.Gear; using BetterGenshinImpact.Model.Gear.Tasks; using BetterGenshinImpact.Service.GearTask; @@ -92,7 +94,9 @@ public partial class GearTaskExecutor : ObservableObject var rootTask = await _taskConverter.ConvertTaskDataAsync(rootTaskData); // 使用执行管理器执行任务 - await _executionManager.ExecuteWithTrackingAsync(rootTask, ct); + CancellationContext.Instance.Set(); + using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(ct, CancellationContext.Instance.GetActiveToken()); + await _executionManager.ExecuteWithTrackingAsync(rootTask, linkedCts.Token); StatusMessage = "任务执行完成"; Progress = 100; @@ -112,6 +116,8 @@ public partial class GearTaskExecutor : ObservableObject } finally { + CancellationContext.Instance.Clear(); + RunnerContext.Instance.Clear(); IsExecuting = false; } } @@ -233,4 +239,4 @@ internal class EmptyGearTask : BaseGearTask { return Task.CompletedTask; } -} \ No newline at end of file +} diff --git a/BetterGenshinImpact/ViewModel/Pages/GearTaskListPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/GearTaskListPageViewModel.cs index e15878b9..c273ba60 100644 --- a/BetterGenshinImpact/ViewModel/Pages/GearTaskListPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/GearTaskListPageViewModel.cs @@ -350,7 +350,7 @@ public partial class GearTaskListPageViewModel : ViewModel return; } - await executor.ExecuteTaskDefinitionAsync(taskDefinition.Name, CancellationContext.Instance.GetActiveToken()); + await executor.ExecuteTaskDefinitionAsync(taskDefinition.Name); } catch (Exception ex) {