You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Azure Batch任务返回错误以支持任务重新激活?

解决Azure Batch任务无法重新激活的问题

我来帮你搞定这个问题!你遇到的核心差异在于:任务是正常返回非零退出码终止,还是因未处理异常崩溃终止

你当前的代码在捕获异常后用ExceptionDispatchInfo.Capture(ex).Throw();重新抛出异常,这会导致程序未经处理而崩溃。Azure Batch对于这类“异常崩溃”的任务,通常不会提供重新激活选项;而那些能看到Reactivate按钮的任务,都是程序正常返回非零退出码后终止的——Batch识别这种情况为“预期内的失败”,允许你重新激活重试。

具体修改方案

只需要把异常处理部分的重新抛出逻辑,改成返回非零退出码让程序正常终止即可:

public class Program {
    private static void Main(string[] args) {
        try {
            ConsoleLogger.Info($"Job.DataTransfer process started! ");
            DataTransferSettings dataTransferSettings = DataTransferSettingsReader.GetDataTransferSettings();
            if (dataTransferSettings != null) {
                ServicePointManager.DefaultConnectionLimit = int.MaxValue;
                CopyData(dataTransferSettings);
            } else {
                throw new Exception($"Process stopped, check data transfer settings.");
            }
            ConsoleLogger.Info($"Job.DataTransfer process completed.");
            // 正常完成时返回0退出码
            Environment.Exit(0);
        } catch (Exception ex) {
            ConsoleLogger.Error(GetExceptionMessage(ex), ex);
            // 用非零退出码标记任务失败,同时让程序正常终止
            Environment.Exit(1);
        }
    }
}

额外说明

  • 为什么这样有效:Azure Batch判断任务是否可重新激活的关键是任务的终止方式。通过Environment.Exit()返回非零码,属于程序主动的、正常的失败退出,Batch会将任务状态标记为失败并提供重新激活选项;而未处理异常导致的崩溃,Batch会认为是不可预期的异常终止,通常不支持重新激活。
  • 可选优化:你可以给不同的错误场景定义不同的退出码(比如用1表示配置错误,2表示数据复制失败),这样在Batch门户查看任务详情时,能快速定位失败原因。

内容的提问来源于stack exchange,提问作者Alexa Adrian

火山引擎 最新活动