持久函数 - Activity 函数中的可等待任务
Durable Functions - Awaitable Tasks inside Activity Function
我有一个持久函数,其输入由之前的 activity 函数确定
对于每个 activity 函数,我都有多个可等待的任务,其中每个任务都取决于前一个任务的输出。
这是我的结构如下:
管弦乐队
[FunctionName("MessageController")]
public static async void Run(
[OrchestrationTrigger] DurableOrchestrationContext context,
TraceWriter log)
{
if (!context.IsReplaying) log.Warning("MessageController started");
var Input1= context.CallActivityAsync<ResultMessage>("Function_1", new InputMessage());
var Input2= context.CallActivityAsync<ResultMessage>("Function_2", Input1);
var Input3= context.CallActivityAsync<ResultMessage>("Function_2", Input2);
}
Activity函数
[FunctionName("Function_1")]
public static ResultMessage Run(
[ActivityTrigger] DurableActivityContext activityContext,
TraceWriter log)
{
//Awaitable task
var taskOutput= await DoSomething();
//Awaitable task
var token = await DoAnotherThing(taskOutput);
}
我已经测试过了,一切正常。但我想知道这是否是好的做法?
在持久函数的 activity 函数中有等待任务是否正常?
是的,完全没问题。事实上,您几乎可以在 activity 函数中做任何您喜欢的事情,只要它们在合理的时间内完成(消耗计划少于 5 分钟)。您可以执行异步调用、切换线程和执行非确定性操作。
Constraints 仅适用于协调器功能。
我有一个持久函数,其输入由之前的 activity 函数确定 对于每个 activity 函数,我都有多个可等待的任务,其中每个任务都取决于前一个任务的输出。
这是我的结构如下:
管弦乐队
[FunctionName("MessageController")]
public static async void Run(
[OrchestrationTrigger] DurableOrchestrationContext context,
TraceWriter log)
{
if (!context.IsReplaying) log.Warning("MessageController started");
var Input1= context.CallActivityAsync<ResultMessage>("Function_1", new InputMessage());
var Input2= context.CallActivityAsync<ResultMessage>("Function_2", Input1);
var Input3= context.CallActivityAsync<ResultMessage>("Function_2", Input2);
}
Activity函数
[FunctionName("Function_1")]
public static ResultMessage Run(
[ActivityTrigger] DurableActivityContext activityContext,
TraceWriter log)
{
//Awaitable task
var taskOutput= await DoSomething();
//Awaitable task
var token = await DoAnotherThing(taskOutput);
}
我已经测试过了,一切正常。但我想知道这是否是好的做法? 在持久函数的 activity 函数中有等待任务是否正常?
是的,完全没问题。事实上,您几乎可以在 activity 函数中做任何您喜欢的事情,只要它们在合理的时间内完成(消耗计划少于 5 分钟)。您可以执行异步调用、切换线程和执行非确定性操作。
Constraints 仅适用于协调器功能。