Вызовите хранимую процедуру и не ждите ответа - PullRequest
0 голосов
/ 09 июня 2018

Я не смог найти ни одного последнего сообщения о проблемах такого типа.Итак, спрашивая это снова.

Я использую ASP.NET MVC, petapoco ORM для сохранения значений в базе данных.Всякий раз, когда я сохраняю объект, я генерирую метатег для функции поиска и сохраняю его в другой таблице.Для выполнения этой хранимой процедуры требуется около 5 секунд.

Вот мой вопрос: я не хочу ждать завершения выполнения.Так что пытаюсь использовать async и жду.Но я не мог заставить это работать.Нужен ли нам вызов базы данных async petapoco, чтобы он заработал, или достаточно просто ключевое слово asyncВ каждом уроке я наблюдал за асинхронным использованием встроенных асинхронных функций внутри асинхронных функций.Поэтому я не уверен, как я могу настроить асинхронные для этого требования.Есть предложения?

public ActionResult Save(entityModel model)
{
    //save model
    SaveEntity(model);

    //Generate metatag and store it in separate table.
    GenerateMetatag(model.id);

    return view(model);
}

public void GenerateMetatag(int id)
{
    //call stored procedure
}

Спасибо

1 Ответ

0 голосов
/ 10 июня 2018

Если вы реструктурируете свой код для использования async / await, у вас есть возможность просто не ожидать задачу, которая затем будет выполняться в фоновом режиме.

Однако при этом возникает ряд опасностей..

Во-первых, если выброшено исключение, отсутствует дескриптор задачи, к которому будет возвращено это исключение, и вызывающий код не будет знать об этом исключении.

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

В-третьих, это немного запутанно и неожиданно.Это может вызвать проблемы с обслуживаемостью в будущем.

Если это вообще возможно, предпочтительнее перенести фоновую обработку во что-то вроде внешней очереди, поскольку в случае кратковременного сбоя можно безопасно повторить операцию.Длительные фоновые задачи никогда не рекомендуются в ASP.NET.Если это невозможно, может потребоваться оптимизация производительности вашего вызова базы данных или, наконец, простое блокирование ответа до завершения запроса.

...