我有一个使用postasync并行调用的azure函数...
我将所有任务安排在一个队列中,然后使用“ WhenAll”并行等待响应。
我可以确认有大量HTTP活动发送到Azure,然后在我等待来自Azure的响应时HTTP活动在本地计算机上停止。
当我监视Azure Portal中的功能时,请求似乎每三秒钟左右就会到达一次,即使在我看来,初始突发之后没有网络流量。
当我返回结果时,它们以与发送它们完全相同的顺序依次到达,即使Azure Portal监视器指示某些功能需要10秒钟运行,而某些功能需要3秒运行。 / p>
我正在将Azure函数版本1与消费服务计划一起使用。
CentralUSPlan (Consumption: 0 Small)
我的host.json文件为空==> {}
为什么会这样?是否需要一些设置才能使azure函数并行执行?
public async Task<List<MyAnalysisObject>> DoMyAnalysisObjectsHttpRequestsAsync(List<MyAnalysisObject> myAnalysisObjectList)
{
List<MyAnalysisObject> evaluatedObjects = new List<MyAnalysisObject>();
using (var client = new HttpClient())
{
var tasks = new List<Task<MyAnalysisObject>>();
foreach (var myAnalysisObject in myAnalysisObjectList)
{
tasks.Add(DoMyAnalysisObjectHttpRequestAsync(client, myAnalysisObject));
}
var evaluatedObjectsArray = await Task.WhenAll(tasks);
evaluatedObjects.AddRange(evaluatedObjectsArray);
}
return evaluatedObjects;
}
public async Task<MyAnalysisObject> DoMyAnalysisObjectHttpRequestAsync(HttpClient client, MyAnalysisObject myAnalysisObject)
{
string requestJson = JsonConvert.SerializeObject(myAnalysisObject);
Console.WriteLine("Doing post-async:" + myAnalysisObject.Identifier);
var response = await client.PostAsync(
"https://myfunctionapp.azurewebsites.net/api/BuildMyAnalysisObject?code=XXX",
new StringContent(requestJson, Encoding.UTF8, "application/json")
);
Console.WriteLine("Finished post-async:" + myAnalysisObject.Identifier);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine("Got result:" + myAnalysisObject.Identifier);
return JsonConvert.DeserializeObject<MyAnalysisObject>(result);
}