Azure функции, работающие в последовательности, желательно параллельно - PullRequest
0 голосов
/ 26 октября 2018

У меня есть функция Azure, которую я вызываю параллельно, используя postasync ...

Я размещаю все свои задачи в очереди, а затем жду ответов параллельно, используя "WhenAll".

Я могу подтвердить, что в Azure наблюдается всплеск активности HTTP, а затем активность HTTP прекращается на моем локальном компьютере, пока я ожидаю ответов от Azure.

Когда я наблюдаю за функцией в портале Azure, онаПохоже, что запросы приходят каждые три секунды или около того, хотя с моей стороны нет сетевого трафика после первоначального пакета.

Когда я получаю свои результаты обратно, они поступают в последовательности, точно так жеЯ отправил их, хотя монитор портала Azure показывает, что для запуска некоторых функций требуется 10 секунд, а для запуска других - 3 секунды.

Я использую функции 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...