#c# #guid #azure-durable-functions
#c# #идентификатор guid #azure-durable-функции
Вопрос:
Я пишу надежную функцию, и мне нужно сгенерировать несколько идентификаторов GUID. Согласно документации, вам необходимо проявлять особую осторожность, поскольку генерация идентификаторов GUID не является детерминированной. При воспроизведении оркестровки он должен использовать тот же идентификатор GUID, и обходной путь, описанный в документации, заключается в
Используйте
NewGuid
в .NET илиnewGuid
в JavaScript для безопасной генерации случайных идентификаторов GUID.
Я предполагаю, что они означают статический метод Guid.NewGuid()
, но когда я использую его в своем коде, например:
[FunctionName("Orchestration")]
public static async Task Orchestration([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger logger) {
var guid = Guid.NewGuid();
Я получаю предупреждение компилятора:
Предупреждение DF0102: ‘Guid.NewGuid’ нарушает ограничение детерминированного кода оркестратора. (DF0102)
и когда я запускаю функцию, я вижу, что при воспроизведении она выдает другой идентификатор GUID, поэтому она определенно не детерминирована. Я знаю, что могу написать функцию activity для генерации идентификатора GUID, но это кажется немного излишним, если для этого есть специальная поддержка. В этом комментарии на GitHub упоминается, что он был выпущен в версии v1.7.0 (я использую версию v2.3.1).
Ответ №1:
При написании этого вопроса я понял, в чем была моя проблема. Это предположение:
Я предполагаю, что они имеют в виду статический метод
Guid.NewGuid()
Оказывается, в IDurableOrchestrationContext
интерфейсе также есть NewGuid()
метод, который
Создает новый идентификатор GUID, который безопасен для воспроизведения в оркестровке или операции.
[FunctionName("Orchestration")]
public static async Task Orchestration([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger logger) {
var guid = context.NewGuid();
Комментарии:
1. Не могли бы вы привести пример?
2. @user989988 не уверен, что пример действительно полезен, но вот он.