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

能否在Azure Durable Functions中从一个Activity Function调用另一个?

Azure Durable Functions中Activity Function能否调用其他Activity?

不允许直接从一个Activity Function调用另一个Activity Function。

在Durable Functions的架构设计里,Orchestrator是工作流的核心协调角色,负责统筹调度所有Activity、子Orchestrator的执行,同时管理工作流状态持久化、重试逻辑等关键环节。而Activity只是专注执行单一任务的单元,没有内置调度能力,如果直接在一个Activity里调用另一个Activity,会完全绕过Orchestrator的状态追踪机制,导致工作流执行记录无法正确保存,后续重试、故障恢复等功能也会失效。

针对你给出的场景,正确做法就是像你示例里最初的逻辑那样,把两个Activity的调用都放在Orchestrator中完成:先调用GetDbToken获取数据库令牌,再将令牌作为参数传递给GetOrdersFromDb获取订单数据。

另外帮你修正示例代码里的两处小错误:

  1. GetOrdersFromDb的FunctionName属性拼写错误(多了个字母a)
  2. Orchestrator的返回类型Task<List<string>>和实际返回的List<Order>不匹配

修正后的完整代码如下:

[FunctionName("ExpensiveDurableSequence")]
public static async Task<List<Order>> Run(
    [OrchestrationTrigger] DurableOrchestrationContext context)
{
    var response = new List<Order>();
    var token = await context.CallActivityAsync<string>("GetDbToken", "i-am-root");

    var orders = await context.CallActivityAsync<IEnumerable<Order>>("GetOrdersFromDb", token);
    response.AddRange(orders);
    return response;
}

[FunctionName("GetDbToken")]
public static string GetDbToken([ActivityTrigger] string username)
{
    // 补充生成token的业务逻辑
    return token;
}

[FunctionName("GetOrdersFromDb")]
public static IEnumerable<Order> GetOrdersFromDb([ActivityTrigger] string apikey)
{
    // 补充从数据库获取订单的业务逻辑
    return orders;
}

内容的提问来源于stack exchange,提问作者KAVIN S CSE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:04:52