Лазурная асинхронная функция занимает 8 секунд, когда она должна продолжаться после - PullRequest
0 голосов
/ 01 марта 2019

У меня есть функция Azure, которая работает дольше, чем ожидалось.Когда поступает сообщение http, оно обрабатывает авторизацию заголовка и выполняет асинхронную задачу, которая обрабатывает большую часть обработки перед возвратом возврата OK.Когда я закомментирую асинхронную задачу, которая обрабатывает обработку, я получаю возврат около 60 мс, но при запуске асинхронной задачи это занимает около 8000 мс.Если я жду этого, это займет около 20000 мс.Есть идеи, почему асинхронная задача не продолжается немедленно с оператором return?

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{


    log.Info("C# HTTP trigger function processed a request.");
    string ret = "";

    string id = "";

    try
    {
        IEnumerable<string> headerValues = req.Headers.GetValues("Token");
        id = headerValues.FirstOrDefault();
    }
    catch
    {
        return req.CreateResponse(HttpStatusCode.Unauthorized);
    }

    log.Info("Got Token " + id);
    if (!string.IsNullOrEmpty(id) && id == "proper token")
    {
        Execute(req);

        return req.CreateResponse(HttpStatusCode.OK, ret);
    }
    else
    {
        return req.CreateResponse(HttpStatusCode.Unauthorized);
    }
}

public static async Task Execute(HttpRequestMessage req)
{
    //processing code here
}

1 Ответ

0 голосов
/ 01 марта 2019

Вы не сможете выполнить асинхронный метод Execute, не дождавшись его, перед возвратом ответа imho.Я не уверен, но мне показалось бы странным, что вы все равно сможете продолжить чтение из потока запросов после создания ответа.

Если вы предполагаете, что обработка запроса может занятьдолго, тогда я бы посоветовал вам прочитать запрос, выгрузить содержимое запроса в очередь и вернуть HTTP-принятый код состояния (202).Затем создайте другой процесс (который может быть другой функцией Azure), который асинхронно обрабатывает этот запрос из очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...