如何在Azure可靠函数中安全生成GUID?

3
我正在编写一个可靠函数,并需要生成一些GUID。根据文档,你需要非常小心,因为GUID生成是不确定的。当重放编排时,应该使用相同的GUID,文档中描述的解决方法如下:

在.NET中使用NewGuid或在JavaScript中使用newGuid来安全地生成随机GUID。

我认为他们指的是静态方法Guid.NewGuid(),然而当我在我的代码中使用它时,像这样:
[FunctionName("Orchestration")]
public static async Task Orchestration([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger logger) {
    var guid = Guid.NewGuid();

我收到了一个编译器警告:

警告 DF0102:'Guid.NewGuid' 违反了编排确定性代码约束。(DF0102)

当我运行这个函数时,我发现在重放过程中它会生成不同的 GUID,因此它绝对不是确定性的。我知道可以编写活动函数来生成一个 GUID,但如果有专门支持这一点,那么这似乎有些过度设计。 这篇 GitHub 评论提到它已经在 v1.7.0 版本中发布(我正在使用 v2.3.1)。

1个回答

3
在撰写这个问题时,我意识到我的问题所在。它就是这个假设:
我认为他们指的是 静态方法 Guid.NewGuid()
事实证明,IDurableOrchestrationContext接口也有一个NewGuid() 方法,它
创建一个新的GUID,可以在编排或操作中进行重放。
[FunctionName("Orchestration")]
public static async Task Orchestration([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger logger) {
    var guid = context.NewGuid();

请您能否举个例子? - user989988
@user989988 不确定示例是否真的有用,但是这里有一个。 - Glorfindel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接