gpt4 book ai didi

azure - 在 Azure Durable Functions Orchestrator 中使用异步辅助函数是否安全?

转载 作者:行者123 更新时间:2023-12-01 01:40:09 28 4
gpt4 key购买 nike

我正在尝试偶尔查找一些Non-Deterministic workflow detected: TaskScheduledEvent: 0 TaskScheduled ...我们的持久功能项目中出现错误。这种情况并不常见(大约 10,000 个实例中出现 3 次)。

将协调器代码与约束进行比较时documented here我们使用一种我不清楚的模式。为了使编排器代码更加干净/可读,我们使用一些私有(private)异步辅助函数来制作实际的 CallActivityWithRetryAsync调用,有时包装在异常处理程序中进行日志记录,然后是主协调器函数 await在此辅助函数上。

类似于这个简化示例:

[FunctionName(Name)]
public static async Task RunPipelineAsync(
[OrchestrationTrigger]
DurableOrchestrationContextBase context,

ILogger log)
{
// other steps

await WriteStatusAsync(context, "Started", log);

// other steps

await WriteStatusAsync(context, "Completed", log);
}

private static async Task WriteStatusAsync(
DurableOrchestrationContextBase context,
string status,
ILogger log
)
{
log.LogInformationOnce(context, "log message...");
try
{
var request = new WriteAppDocumentStatusRequest
{
//...
};

await context.CallActivityWithRetryAsync(
"WriteAppStatus",
RetryPolicy,
request
);
}
catch(Exception e)
{
// "optional step" will log errors but not take down the orchestrator
// log here
}
}

实际上,这些任务与 Task.WhenAll 结合使用。 。调用这些是否有效 async函数,尽管事实上它们并不直接位于 context 上?

最佳答案

是的,您所做的事情是完全安全的,因为它仍然会导致确定性行为。只要您不执行任何自定义线程调度或调用具有自己单独的异步回调的非持久 API(例如,网络 API 通常具有在单独线程上运行的回调),就可以了。

如果您不确定,我强烈建议您使用我们的Durable Functions C# analyzer分析您的代码是否存在编码错误。这将有助于标记任何可能导致非确定性工作流程错误的编码错误。

更新

注意:当前版本的分析器将要求您向私有(private)异步函数添加 [Deterministic] 属性,如下所示:

[Deterministic]
private static async Task WriteStatusAsync(
DurableOrchestrationContextBase context,
string status,
ILogger log
)
{
// ...
}

这让它知道您的编排器函数正在使用私有(private)异步方法,并且它也需要进行分析。如果您使用 Durable Functions 1.8.3 或更低版本,则 [Deterministic] 属性将不存在。但是,您可以创建自己的具有相同名称的自定义属性,分析器将遵循它。例如:

[Deterministic]
private static async Task WriteStatusAsync(
DurableOrchestrationContextBase context,
string status,
ILogger log
)
{
// ...
}

// Needed for the Durable Functions analyzer
class Deterministic : Attribute { }

但请注意,我们计划在未来版本中删除对 [Deterministic] 属性的需求,因为我们发现它实际上可能没有必要。

关于azure - 在 Azure Durable Functions Orchestrator 中使用异步辅助函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58880732/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com