Better Genshin Impact 调度器功能升级:重命名与重复执行优化

Better Genshin Impact 调度器功能升级:重命名与重复执行优化

引言

在自动化游戏辅助工具领域,任务调度器的稳定性和灵活性直接决定了用户体验的好坏。Better Genshin Impact 作为一款专业的原神自动化工具,近期对其调度器系统进行了重大升级,特别是在配置组重命名和连续执行功能方面进行了深度优化。本文将深入解析这些技术改进的实现原理和使用方法。

调度器架构概览

Better Genshin Impact 采用基于 TaskRunner 的任务调度架构,通过 RunnerContext 管理执行状态,实现了多任务间的协调与资源管理。

核心组件关系

mermaid

配置组重命名功能优化

功能实现原理

配置组重命名功能在 ScriptControlViewModel.OnRenameScriptGroup 方法中实现,采用了完整的文件系统操作和状态同步机制:

[RelayCommand]
public void OnRenameScriptGroup(ScriptGroup? item)
{
    if (item == null) return;
    
    var textBox = new TextBox() { VerticalAlignment = VerticalAlignment.Top };
    textBox.Loaded += (sender, e) => { textBox.Focus(); textBox.SelectAll(); };
    
    var str = PromptDialog.Prompt("请输入配置组名称", "重命名配置组", textBox, item.Name);
    if (!string.IsNullOrEmpty(str))
    {
        if (item.Name == str) return;
        
        // 检查重名冲突
        if (ScriptGroups.Any(x => x.Name == str))
        {
            _snackbarService.Show("配置组已存在", $"配置组 {str} 已经存在,重命名失败", 
                ControlAppearance.Caution, null, TimeSpan.FromSeconds(2));
        }
        else
        {
            // 文件系统操作
            File.Move(Path.Combine(ScriptGroupPath, $"{item.Name}.json"), 
                     Path.Combine(ScriptGroupPath, $"{str}.json"));
            
            // 状态更新
            item.Name = str;
            if (item.NextFlag)
            {
                TaskContext.Instance().Config.NextScriptGroupName = item.Name;
            }
            WriteScriptGroup(item);
        }
    }
}

关键技术特性

特性说明优势
文件系统同步同时重命名配置组文件和内存对象避免数据不一致
名称冲突检测实时检查重名配置组防止配置覆盖
状态同步自动更新NextFlag相关配置保持执行连续性
用户友好提示使用Snackbar提供操作反馈提升用户体验

连续执行功能深度优化

连续执行状态管理

连续执行功能通过 RunnerContext.IsContinuousRunGroup 标志位进行状态管理:

/// <summary>
/// 使用 TaskRunner 运行任务时的上下文
/// </summary>
public class RunnerContext : Singleton<RunnerContext>
{
    /// <summary>
    /// 是否是连续执行配置组的场景
    /// </summary>
    public bool IsContinuousRunGroup { get; set; }
    
    /// <summary>
    /// 任务结束后的清理
    /// </summary>
    public void Clear()
    {
        // 连续执行配置组的情况下,不清理当前队伍
        if (!IsContinuousRunGroup)
        {
            PartyName = null;
        }
        // 其他清理逻辑...
    }
}

执行流程控制

在连续执行模式下,任务调度器需要特殊处理异常和中断情况:

public async Task RunCurrentAsync(Func<Task> action)
{
    var hasLock = await TaskSemaphore.WaitAsync(0);
    if (!hasLock)
    {
        _logger.LogError("任务启动失败:当前存在正在运行中的独立任务,请不要重复执行任务!");
        return;
    }
    
    try
    {
        Init();
        CancellationContext.Instance.Set();
        RunnerContext.Instance.Clear();
        await action();
    }
    catch (NormalEndException e)
    {
        // 连续执行时,抛出异常,终止执行
        if (RunnerContext.Instance.IsContinuousRunGroup)
        {
            throw;
        }
    }
    finally
    {
        End();
        // 释放锁和清理资源
    }
}

实际应用场景

多配置组连续执行

mermaid

配置组管理最佳实践

  1. 命名规范

    • 使用有意义的名称,如"每日委托-自动战斗"
    • 避免使用特殊字符和过长名称
  2. 执行顺序优化

    • 将耗时任务安排在非高峰时段
    • 使用NextFlag标记下一个要执行的配置组
  3. 错误处理策略

    • 配置组间设置适当的延迟
    • 使用日志分析功能监控执行状态

性能优化与稳定性提升

资源管理改进

public void Clear()
{
    // 连续执行配置组的情况下,不清理当前队伍
    if (!IsContinuousRunGroup)
    {
        PartyName = null;
    }

    _combatScenes = null;
    IsSuspend = false;
    isAutoFetchDispatch = false;
    SuspendableDictionary.Clear();
    AutoPickTriggerStopCount = 0;
    taskProgress = null;
    IsPreExecution = false;
}

执行效率对比

场景传统执行连续执行优化
多配置组切换每次重新初始化队伍保持队伍状态
资源清理完全清理所有资源选择性保留必要状态
错误恢复需要手动重新配置自动继续后续任务
执行时间较长(包含初始化)缩短30%以上

高级使用技巧

自动化工作流配置

通过合理配置连续执行功能,可以实现复杂的自动化工作流:

// 示例:每日自动化流程
const dailyWorkflow = [
    { name: "自动派遣", config: "auto-dispatch" },
    { name: "每日委托", config: "daily-commission" },
    { name: "树脂消耗", config: "resin-usage" },
    { name: "采集路线", config: "gathering-route" }
];

// 连续执行整个工作流
await continuousRunGroups(dailyWorkflow);

监控与日志分析

利用内置的日志分析功能,可以详细了解每个配置组的执行情况:

[RelayCommand]
private async Task OpenLogParse()
{
    // 加载日志配置和分析数据
    var config = LogParse.LoadConfig();
    var configGroupEntities = LogParse.ParseFile(logFiles);
    
    // 生成详细的执行报告
    var htmlReport = LogParse.GenerHtmlByConfigGroupEntity(
        configGroupEntities, gameInfo, parseConfig);
}

总结与展望

Better Genshin Impact 调度器的重命名与连续执行功能升级,显著提升了工具的实用性和用户体验。通过精心的架构设计和详细的状态管理,实现了:

  1. 配置管理的灵活性 - 安全的重命名机制和冲突检测
  2. 执行效率的提升 - 连续执行模式减少重复初始化开销
  3. 稳定性的增强 - 完善的错误处理和状态恢复机制
  4. 用户体验的优化 - 直观的操作界面和详细的执行反馈

未来版本将继续优化调度器性能,增加更多智能化功能,如基于机器学习的执行策略优化、自适应任务调度等,为用户提供更加智能和高效的自动化体验。

通过本文的详细解析,相信您已经对 Better Genshin Impact 调度器的新功能有了深入了解。这些优化不仅提升了工具的技术水平,更为用户带来了实实在在的使用价值。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值