#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);