Я ломаю Cosmos DB V1 триггерное приложение-функцию, если я делаю его асинхронным? - PullRequest
0 голосов
/ 28 сентября 2018

, чтобы использовать HTTPClient и отправлять сообщения в веб-службу из моего приложения-функции Azure. Запуск триггера Cosmos DB V1 Мне пришлось сделать функцию асинхронной, которой она не является по умолчанию,

Изменение

 public static class Function1
    {
        [FunctionName("Function1")]
        public static void RunAsync([CosmosDBTrigger(

К

public static class Function1
    {
        [FunctionName("Function1")]
        public static async void RunAsync([CosmosDBTrigger(

Обратите внимание на асинхронную часть во втором определении триггера функции

Мне это нужно, потому что позже в функции я использую http-клиент следующим образом, и он должен использоватьawait

HttpResponseMessage response = await httpClient.PostAsync("https://XXXXX", new StringContent(transaction.ToString(), System.Text.Encoding.UTF8, "application/json"));

Я отключаю триггер, делая его асинхронным, или это допустимое и поддерживаемое изменение?

Если нет, как я могу изменить использование моего httpCLient для работы в триггереФункция App?

ПРИМЕЧАНИЕ: код работает, как и ожидалось, я просто беспокоюсь, что он работает по ошибке, так что сегодня.

1 Ответ

0 голосов
/ 28 сентября 2018

Не нужно беспокоиться об асинхронном модификаторе, он не влияет на работу функции Azure.

Функция Azure обеспечивает обнаружение события триггера и заполнение соответствующих параметров перед выполнением нашего определенного кода.Асинхронизация и ожидание могут иметь значение только для нашего самоопределяемого кода.

Например

Task<HttpResponseMessage> task = httpClient.PostAsync("https://XXXXX", new StringContent(transaction.ToString(), System.Text.Encoding.UTF8, "application/json"));

// Some synchronous code doesn't rely on the response
...

HttpResponseMessage response =  await task;

Обычно мы создаем задачу отдельно, чтобы воспользоваться асинхронностью.Функция продолжает выполнение другого кода в ожидании завершения задачи http-запроса.Это то, что мы называем асинхронным.После того, как другой код закончен, мы используем await, чтобы убедиться, что мы получаем желаемый ответ, так как нет дополнительного кода для потребления.

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

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