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

Azure持久函数调用foreach循环中的Activity函数。可以吗?,azure,azure-durable-functions,Azure,Azure Durable Functions,在循环中调用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.CallAc

在循环中调用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);
var tasks=newlist();
foreach(项目中的var项目)
{
var task=context.CallActivityWithRetryAsync(Activity2Name,item,…);
任务。添加(任务);
task.ContinueWith(t=>{
var innerTask=context.CallActivityWithRetryAsync(Activity3Name,t.Result,…);
返回内部任务;
},TaskContinuationOptions.ExecuteSynchronously);
}
等待任务。何时(任务);
我可能应该以某种方式将内部任务添加到任务集合中,所以wait将等待所有任务。然后取消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);
var tasks=新任务[files.Length];
for(int i=0;i

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

当然,我正朝着这个方向进行调查。谢谢。对于建议,您是否有类似ContinueAsNew或类似的呼叫?遵循上述模式似乎没有帮助。看起来业务流程刚刚结束。您到底想实现什么?我在activity1中获得ID列表。现在我想在activity2中循环id并按id获取资源,然后将资源放入activity3中的队列。所以我尝试使用task2.ContinuesWith(=>activity3)。我不知道这是否可以理解