天蓝色函数按顺序运行,需要并行

时间:2018-10-26 20:52:34

标签: c# azure parallel-processing azure-functions

我有一个使用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);
}

0 个答案:

没有答案