您正在构建一个 Durable Functions 工作流,该工作流接收包含 50,000 个图像 URL 的列表,并且必须并行提取每个图像的 EXIF 元数据,然后返回一个聚合的列表。业务流程协调程序必须保持确定性,并且能够在重放或重启后正确恢复。您应该在业务流程协调程序函数中执行什么操作来实现扇出/扇入模式?
选择一个答案
点击一个选项来检查您的答案。
正确答案: 遍历 URL,使用 CallActivityAsync`<T>` 调度每个活动,将返回的 Task`<T>` 对象收集到一个列表中,然后等待 Task.WhenAll(tasks) 并聚合结果。.
为什么这是答案
此选项正确地描述了 Durable Functions 中扇出/扇入模式的最佳实践。通过使用 CallActivityAsync<T 调度每个图像处理活动,并将返回的 Task<T 对象收集到列表中,然后使用 Task.WhenAll(tasks) 等待所有活动完成,可以实现并行执行并确保业务流程协调器的确定性。最后,聚合结果以完成工作流。 其他选项不正确: 在业务流程协调程序内部使用 Parallel.ForEach 会破坏确定性,因为业务流程协调器函数必须是确定性的,不能直接使用非确定性操作。阻塞 Task.Result 也会导致死锁或性能问题。 调用单个活动来处理所有 URL 会失去并行处理的优势,并且可能导致活动函数超时或内存不足,尤其是在处理大量数据时。 在每次活动调用后调用 ContinueAsNew 不适用于扇出/扇入模式,它主要用于长时间运行的业务流程协调器,以重置其状态并避免历史记录过大,而不是用于并行执行和聚合结果。
通过考试 — 无需无休止地寻找答案
将本次考试的所有验证问题和解释集中在一处,节省数小时的准备时间。1,000+ 认证 · 20+ 语言 · 免费开始。
更快通过考试 → 无需银行卡