foreach 循环中的 Azure 持久函数调用活动函数。可以吗?

Azure durable function call activtity function in foreach loop. Is it OK?

在循环中调用activity函数是否可以,像这样:?

foreach(var item in items)
{
    await context.CallActivityWithRetryAsync(....,item,...);
}

扩展问题我需要在循环内顺序执行 2 个活动

var tasks = new List<Task<TypeA>>();

foreach(var item in items)
{
    var task = context.CallActivityWithRetryAsync(Activity2Name,item,...);

    tasks.Add(task);

    task.ContinueWith(t => {
        var innerTask =  context.CallActivityWithRetryAsync(Activity3Name,t.Result,...);
        return innerTask;
    },TaskContinuationOptions.ExecuteSynchronously );
}
await Task.WhenAll(tasks);

我或许应该以某种方式将内部任务添加到任务集合中,因此 await 将等待所有任务。然后去掉 TaskContinuationOptions.ExecuteSynchronously ?

以上内容有效。但我不确定这样做是否正确。

这是个好问题。我不是 100% 确定是否存在问题,但这是我的猜测:您的持久上下文将执行多次,因此您最好等待循环外的所有活动。

var tasks = new Task<long>[files.Length];
for (int i = 0; i < files.Length; i++)
{
        tasks[i] = context.CallActivityWithRetryAsync("FunctionName", files[i]);
}

await Task.WhenAll(tasks);

至少这是我在项目中成功使用的方式