作为外部入参 CancellationToken

This commit is contained in:
辉鸭蛋
2025-07-27 17:19:22 +08:00
parent 3e7fe95502
commit c474c177f7
7 changed files with 30 additions and 18 deletions

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -22,6 +23,11 @@ public abstract class BaseGearTask : ObservableObject
/// 任务名称
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// 任务类型
/// </summary>
public string Type { get; set; } = string.Empty;
/// <summary>
/// 任务的文件位置,如果有
@@ -36,6 +42,7 @@ public abstract class BaseGearTask : ObservableObject
/// <summary>
/// 父节点
/// </summary>
[JsonIgnore]
public BaseGearTask? Father { get; set; }
/// <summary>
@@ -46,14 +53,14 @@ public abstract class BaseGearTask : ObservableObject
/// <summary>
/// 执行任务
/// </summary>
public async Task Execute()
public async Task Execute(CancellationToken ct)
{
var stopwatch = new Stopwatch();
try
{
_logger.LogInformation("------------------------------");
stopwatch.Start();
await Run();
await Run(ct);
}
catch (NormalEndException e)
{
@@ -82,7 +89,7 @@ public abstract class BaseGearTask : ObservableObject
/// <summary>
/// 执行任务
/// </summary>
public abstract Task Run();
public abstract Task Run(CancellationToken ct);
public static BaseGearTask ReadFileToBaseGearTasks(string? path)

View File

@@ -2,6 +2,7 @@ using System;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Model.Gear.Parameter;
using Microsoft.Extensions.Logging;
@@ -25,7 +26,7 @@ public class CSharpReflectionGearTask : BaseGearTask
_params = paramsObj;
}
public override async Task Run()
public override async Task Run(CancellationToken ct)
{
if (string.IsNullOrWhiteSpace(_params.MethodPath))
{
@@ -65,7 +66,7 @@ public class CSharpReflectionGearTask : BaseGearTask
_logger.LogInformation("准备执行反射调用: {MethodPath}, 参数数量: {ParamCount}", methodPath, parameters.Length);
// 解析类型和方法名
Type targetType;
Type? targetType;
string methodName;
if (methodPath.Contains(':'))
@@ -88,7 +89,7 @@ public class CSharpReflectionGearTask : BaseGearTask
var className = string.Join(".", parts2.Take(parts2.Length - 1));
// 在当前程序集和已加载的程序集中查找类型
targetType = Type.GetType(className) ??
targetType = System.Type.GetType(className) ??
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.FirstOrDefault(t => t.FullName == className || t.Name == className);

View File

@@ -1,6 +1,7 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.Core.Script;
@@ -20,7 +21,7 @@ public class JavascriptGearTask : BaseGearTask
public string FolderName { get; set; }
private JavascriptGearTaskParams _params;
private readonly JavascriptGearTaskParams _params;
public JavascriptGearTask(JavascriptGearTaskParams paramsObj)
{
@@ -46,9 +47,9 @@ public class JavascriptGearTask : BaseGearTask
FilePath = Path.Combine(Global.ScriptPath(), _params.FolderName);
}
public override async Task Run()
public override async Task Run(CancellationToken ct)
{
await ExecuteScriptAsync(_params.Context, _params.PathingPartyConfig);
await ExecuteScriptAsync(ct, _params.Context, _params.PathingPartyConfig);
}
// public override string ReadDetail()
@@ -56,7 +57,7 @@ public class JavascriptGearTask : BaseGearTask
// throw new NotImplementedException();
// }
private async Task ExecuteScriptAsync(dynamic? context = null, PathingPartyConfig? partyConfig = null)
private async Task ExecuteScriptAsync(CancellationToken ct, dynamic? context = null, PathingPartyConfig? partyConfig = null)
{
// 默认值
GlobalMethod.SetGameMetrics(1920, 1080);

View File

@@ -1,4 +1,5 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Core.Recorder;
using BetterGenshinImpact.Core.Script;
@@ -12,10 +13,10 @@ public class KeyMouseGearTask : BaseGearTask
FilePath = path;
}
public override async Task Run()
public override async Task Run(CancellationToken ct)
{
// 加载并执行
var json = await File.ReadAllTextAsync(FilePath);
await KeyMouseMacroPlayer.PlayMacro(json, CancellationContext.Instance.Cts.Token, false);
var json = await File.ReadAllTextAsync(FilePath, ct);
await KeyMouseMacroPlayer.PlayMacro(json, ct, false);
}
}

View File

@@ -1,3 +1,4 @@
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Core.Script;
using BetterGenshinImpact.GameTask;
@@ -18,7 +19,7 @@ public class PathingGearTask : BaseGearTask
_params = param;
}
public override async Task Run()
public override async Task Run(CancellationToken ct)
{
// 加载并执行
var task = PathingTask.BuildFromFilePath(_params.Path);

View File

@@ -1,15 +1,15 @@
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.Core.Script;
using BetterGenshinImpact.GameTask.Shell;
namespace BetterGenshinImpact.Model.Gear.Tasks;
public class ShellGearTask(ShellConfig? shellConfig) : BaseGearTask
{
public override async Task Run()
public override async Task Run(CancellationToken ct)
{
var task = new ShellTask(ShellTaskParam.BuildFromConfig(Name, shellConfig ?? new ShellConfig()));
await task.Start(CancellationContext.Instance.Cts.Token);
await task.Start(ct);
}
}

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.Model.Gear.Tasks;
@@ -15,7 +16,7 @@ public class SequentialGearTrigger : GearBaseTrigger
List<BaseGearTask> list = GearTaskRefenceList.Select(gearTask => gearTask.ToGearTask()).ToList();
foreach (var gearTask in list)
{
await gearTask.Run();
await gearTask.Run(CancellationToken.None);
}
}
}