babalae/better-genshin-impact · error · TimeoutException
前往征讨之花任务异常结束
Error message
前往征讨之花任务异常结束
What it means
NavigateToReward 主循环中,若 adjustCameraTask 或 moveToRewardTask 先于 monitorRewardPromptTask 完成(无论成功结束还是抛异常),即判定为寻路子任务异常结束:取消导航令牌、await 该任务(使其异常上抛)后抛 TimeoutException。这说明辅助寻路任务没能持续运行到领奖界面出现。
Source
Thrown at BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs:1208
if (navigationStopwatch.Elapsed >= navigationTimeout)
{
throw new TimeoutException("超时未找到征讨之花领奖界面");
}
var completedTask = await Task.WhenAny(Task.Delay(500, _ct),adjustCameraTask,moveToRewardTask,monitorRewardPromptTask);
if (completedTask == monitorRewardPromptTask)
{
await monitorRewardPromptTask;
_logger.LogInformation("{Name}:已进入征讨之花领奖界面", Name);
return;
}
if (completedTask == adjustCameraTask || completedTask == moveToRewardTask)
{
navigationCts.Cancel();
await completedTask;
throw new TimeoutException("前往征讨之花任务异常结束");
}
}
}
finally
{
navigationCts.Cancel();
try
{
await Task.WhenAll(adjustCameraTask, moveToRewardTask, monitorRewardPromptTask);
}
catch
{
// The main loop observes task failures; shutdown also cancels background tasks.
}
Simulation.SendInput.SimulateAction(GIActions.MoveForward, KeyType.KeyUp);
Simulation.SendInput.SimulateAction(GIActions.MoveLeft, KeyType.KeyUp);
Simulation.SendInput.SimulateAction(GIActions.MoveRight, KeyType.KeyUp);View on GitHub (pinned to a7cb36712d)
Solutions
- 检查 await completedTask 抛出的内部异常堆栈,定位是 Adjust 还是 Move 任务失败。
- 确保这两个辅助任务在领奖面板出现前不提前 return(改为只在确实检测到面板时退出)。
- 在子任务内部 catch 瞬时 OCR/点击异常并继续循环,而非整体结束。
- 校准相关 OCR 区域与文本匹配。
Example fix
// before
if (completedTask == adjustCameraTask || completedTask == moveToRewardTask)
{
navigationCts.Cancel();
await completedTask;
throw new TimeoutException("前往征讨之花任务异常结束");
}
// after
if (completedTask == adjustCameraTask || completedTask == moveToRewardTask)
{
navigationCts.Cancel();
try { await completedTask; }
catch (Exception ex) { throw new TimeoutException($"前往征讨之花任务异常结束:{completedTask == adjustCameraTask ? "镜头调整" : "移动"} 失败", ex); }
throw new TimeoutException($"前往征讨之花任务异常结束:{completedTask == adjustCameraTask ? "镜头调整" : "移动"} 提前完成");
} Defensive patterns
Strategy: retry
Try / catch
try { await NavigateToReward(); }
catch (TimeoutException ex) when (ex.Message.Contains("异常结束"))
{
_logger.LogError("{Name}:{Msg}", Name, ex.ToString());
throw;
} Prevention
- 确保 Adjust/Move 子任务在领奖面板出现前不提前 return。
- 子任务内部消化瞬时异常,避免整体提前结束。
- 在 await completedTask 时保留内部异常堆栈以便定位。
When it happens
Trigger: AdjustRewardCameraTask 或 MoveToRewardTask 内部提前 return(例如认为已到位但实际未触发领奖面板);这两个任务内部抛出异常(OCR 失败、点击失败、坐标越界);任务被外部取消。
Common situations: 寻路子任务逻辑提前判定完成;子任务异常未在内部消化直接冒泡;角色卡住导致移动任务异常退出;OCR 区域漂移使子任务误判。
Related errors
- 超时未找到征讨之花领奖界面
- 关闭补充原粹树脂提示超时
- 计算缺失树脂 {missingResin} 超过树脂上限 {resinLimit}
- 原粹树脂上限 OCR 失败:{countText}
- 原粹树脂上限解析失败:{countText}
AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13).
Data as JSON: /api/errors/0afe5fe47d5fca64.
Report an issue: GitHub.