我正在编写一个可靠函数,并需要生成一些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)。