You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Durable Function v4(独立版)活动中获取重试次数?

在Azure Durable Functions v4(独立版)活动中获取重试次数

可行性结论

可行,但不能通过FunctionContext.RetryContext获取——该属性仅适用于Azure Functions原生的重试策略,而Durable Functions的重试由编排器层面的Durable Task框架管理,需要使用Durable专属的上下文对象。

实现步骤

  • 在活动函数的参数中注入ActivityExecutionContext(来自Microsoft.DurableTask命名空间)
  • 通过ActivityExecutionContext.RetryAttempt属性获取当前重试次数(注意:首次执行时该值为0,第一次重试为1,以此类推)

修改后的活动函数代码

using Microsoft.Azure.Functions.Worker;
using Microsoft.DurableTask;
using Microsoft.Extensions.Logging;

namespace Functions;

public class DemoDurableFunction
{
    // 其他函数代码保持不变...

    [Function(nameof(RunActivity))]
    public async Task<string> RunActivity(
        [ActivityTrigger] string name, 
        ActivityExecutionContext activityContext)
    {
        // 获取当前重试次数:首次执行是0,每重试一次递增1
        int retryCount = activityContext.RetryAttempt;
        var logger = activityContext.CreateLogger(nameof(RunActivity));
        logger.LogInformation("当前活动[{Name}]的重试次数:{RetryCount}", name, retryCount);

        await Task.Delay(500);

        if (name.StartsWith("C"))
        {
            throw new Exception($"No C-names allowed,当前重试次数:{retryCount}");
        }

        return $"DONE: {name}";
    }
}

补充说明

  • 你配置的RetryPolicy(maxNumberOfAttempts: 2)表示最多执行2次(首次执行+1次重试),对应RetryAttempt的值会是0和1
  • 如果需要保留FunctionContext,可以同时注入两个参数,二者互不冲突:
    public async Task<string> RunActivity(
        [ActivityTrigger] string name, 
        ActivityExecutionContext activityContext,
        FunctionContext functionContext)
    {
        // 按需使用两个上下文
    }
    

内容的提问来源于stack exchange,提问作者Bart Kiers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:09:51