我们有一个大约40万个需要计算的元素的数据库。下面显示了一个协调器功能的示例。
[FunctionName("Crawl")]
public static async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext context)
{
if (!context.IsReplaying)
{
}
WriteLine("In orchistration");
var outputs = new List<string>();
var tasks = new Task<string>[3];
var retryOptions = new RetryOptions(
firstRetryInterval: TimeSpan.FromSeconds(60),
maxNumberOfAttempts: 3);
// Replace "hello" with the name of your Durable Activity Function.
tasks[0] = context.CallActivityWithRetryAsync<string>("Crawl_Hello",retryOptions, "Tokyo");
tasks[1] = context.CallActivityWithRetryAsync<string>("Crawl_Hello", retryOptions, "Seattle");
tasks[2] = context.CallActivityWithRetryAsync<string>("Crawl_Hello",retryOptions, "London");
await Task.WhenAll(tasks);
return outputs;
}
每次调用一项活动时,都会调用编排功能。但是我不想每次调用一个活动时就从数据库中获取40万个项目。只是将所有活动代码添加到if语句中,或者什么是正确的方法?我看不到使用WaitAll函数。
答案 0 :(得分:0)
好像您已经在other query中提到的那样,已经找到了解决问题的方法,但是为了他人的利益在此进行了详细说明。
理想情况下,您应该有一个活动函数,该函数首先要首先获取所需的所有数据,然后对它们进行批处理,然后调用另一个处理该数据的活动函数。
由于要计算的元素很多,因此最好将计算分为单独的sub-orchestrators,因为扇入操作是在单个实例上执行的。
为进一步阅读,有一些documented performance targets在部署持久功能时可能会有所帮助。