У меня есть триггер 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;
}
}
}