Функция HTTP C# SQL ASYNC - PullRequest
       57

Функция HTTP C# SQL ASYNC

0 голосов
/ 06 августа 2020

У меня есть триггер http, который вызывает функцию поддержки для выполнения обновления SQL на некоторых JSON. Я ошибся в функции поддержки и случайно использовал команду .ExecuteNonQueryAsyn c (). Этот код отлично работал локально в VS Studio в 100% случаев. Но когда я опубликовал на Azure, функция сработала бы один раз. Единственный способ заставить его снова работать - это запустить / остановить функцию. Я выполнил дамп памяти и увидел, что запущен один поток. HTTP-запрос всегда возвращал 200, хотя он изменял данные только один раз.

Теперь мой вопрос. Функция Azure HTTP не ждет, пока потоки завершат sh перед выходом? Я просто пытаюсь лучше понять Azure threading.

Спасибо

  public static class SetNotificationConfig
{
    [FunctionName("SetNotificationConfig")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        try
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject<dynamic>(requestBody);
            var tem = data["NotificationConfig"];
            string notificationConfig = JsonConvert.SerializeObject(tem);
            SchedulerSupport.SetNotificationConfigJSON(1, notificationConfig);
        }
        catch (Exception ex)
        {
            return new BadRequestObjectResult("Error updating notification configuration: " + ex.Message);
        }
        return new OkResult();
    }
}

    public static void SetNotificationConfigJSON(int storeId, string notificationConfig)
    {
        if (notificationConfig.Length > 0)
        {
            using SqlConnection connection = new SqlConnection(SchedulerSupport.ConnectionStr());
            connection.Open();
            var queryString = "Update SchedulerConfig Set ConfigInfo = JSON_MODIFY(ConfigInfo, '$.NotificationConfig', JSON_QUERY(@notificationConfig)) Where StoreId = @StoreId";
            using SqlCommand command = new SqlCommand(queryString, connection);
            try
            {
                command.Parameters.Add(new SqlParameter("@StoreId", System.Data.SqlDbType.Int));
                command.Parameters["@StoreId"].Value = storeId;
                command.Parameters.AddWithValue("@NotificationConfig", notificationConfig);
                command.ExecuteNonQuery();
            }
            catch
            {
                throw;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...