像这样循环调用活动函数是否可以:?
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);
我也许应该以某种方式将内部任务添加到任务集合中,以便等待将等待所有任务。然后摆脱TaskContinuationOptions.ExecuteSynchronously吗?
以上内容均有效。但是我不确定这是否是正确的解决方法。
答案 0 :(得分:1)
这是一个好问题。我不确定是否有问题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);
至少这是我在项目中成功使用的方式