Azure Durable Function: обнаружено многопоточное выполнение (с примером кода по умолчанию) - PullRequest
1 голос
/ 26 мая 2020

Я создал следующее, используя предоставленный по умолчанию образец кода в Azure Functions:

  1. Стартер HTTP-функций Durable
  2. Orchestrator устойчивых функций
  3. Действие Durable Functions с именем Hello1

HTTP Starter вызывает Orchestrator, но Orchestrator не может вызвать Activity.

Код Orchestrator, который идентичен исходному образцу, за исключением меньше выходных добавлений и для параметра Activity Name установлено значение Hello1:

public static async Task<List<string>> Run(DurableOrchestrationContext context)
{ 
    var outputs = new List<string>();

    // Replace "Hello" with the name of your Durable Activity Function.
    outputs.Add(await context.CallActivityAsync<string>("Hello1", "Tokyo"));

    // returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
    return outputs;
}

Orchestrator выдает следующую ошибку:

Функция DurableFunctionsOrchestrator1 (Orchestrator) завершилась ошибкой. Причина: System.AggregateException: произошла одна или несколько ошибок. (Обнаружено многопоточное выполнение. Это может произойти, если код функции оркестратора ожидает выполнения задачи, которая не была создана методом DurableOrchestrationContext.

Единственный вызов await выполняется для объекта DurableOrchestrationContext , так что же дает?

My HTTP Starter - это образец кода по умолчанию без изменений:

public static async Task<HttpResponseMessage> Run(
    HttpRequestMessage req,
    DurableOrchestrationClient starter,
    string functionName,
    ILogger log)
{
    // Function input comes from the request content.
    dynamic eventData = await req.Content.ReadAsAsync<object>();

    // Pass the function name as part of the route 
    string instanceId = await starter.StartNewAsync(functionName, eventData);

    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

    return starter.CreateCheckStatusResponse(req, instanceId);
}

Код действия также является кодом стандартного образца:

public static string Run(string name)
{
    return $"Hello {name}!";
}

Служба приложений функций настройки:

  1. Версия выполнения: ~ 3
  2. Платформа: 32-битная
  3. Версия управляемого конвейера: Встроенная
...