Ho для передачи параметра из orchstrator в функцию activity

#c# #azure #azure-functions

#c# #azure #azure-функции

Вопрос:

Я хотел бы реализовать надежную функцию с такой структурой:

 public static async Task<string> Orchestrator_BatchHandler([OrchestrationTrigger] DurableOrchestrationContext context, [OrchestrationClient] DurableOrchestrationClient starter, ILogger log)
{
    RequestContent requestContent = context.GetInput<RequestContent>();
    ProcessingStatus currentProcessingStatus = ProcessingStatus.NotCompleted;
    int counter = 1;
    while (currentProcessingStatus == ProcessingStatus.NotCompleted)
     {
         context.SetCustomStatus(string.Format(Resources.StartIteration, Counter, requestContent.MaxPartitionsPerBatch));
         currentProcessingStatus = await context.CallSubOrchestratorAsync<ProcessingStatus>(nameof(Orchestrator_Processing), requestContent);
         counter  ; // How can I pass this Value to Activity_Processing function?

     }
}
[FunctionName(nameof(Orchestrator_Processing))]
public static async Task<ProcessingStatus> Orchestrator_Processing([OrchestrationTrigger] DurableOrchestrationContext context, [OrchestrationClient] DurableOrchestrationClient starter, ILogger log)
{
  ProcessingStatus processingStatus = await context.CallActivityAsync<ProcessingStatus>(nameof(Activity_Processing), requestContent.MaxPartitionsPerBatch);
}
[FunctionName(nameof(Activity_Processing))]
public static ProcessingStatus Activity_Processing([ActivityTrigger] DurableActivityContext context, ILogger log)
{
   int maxValuePerBatch = context.GetInput<int>();
   StartProcessing(log, maxValuePerBatch);

 }
  

теперь мой вопрос в том, как я могу передать параметр из первого оркестратора Orchestrator_BatchHandler в функцию activity?
Например counter , переменная в первом оркестраторе?

Комментарии:

1. Помог ли вам мой ответ? Если да, пожалуйста, примите мой ответ, чтобы прояснить эту тему

2. Извините, но я ищу другое решение, которое использует мой существующий код

3. Разве мое решение не применимо к вашему коду?

4. Как вы можете видеть, я использую CallSubOrchestratorAsync и не хочу менять его на StartNewAsync

5. Почему бы вам не поместить counter во второй параметр «input» вместо requestContent или объединить их вместе

Ответ №1:

Вы можете использовать starter .Запустите метод newasync в вашей функции Orchestrator_BatchHandler:

     string instanceId = await starter.StartNewAsync("Orchestrator_Processing", someJsonObject);
  

и в вашем Orchestrator_Processing вызовите функцию CallActivityAsync

         var output = await context.CallActivityAsync<JObject>("Activity_Processing", someJsonObject);