В веб-приложении ASP.NET Core, как я могу выполнить асинхронную задачу, вернуть сообщение пользователю, а затем выполнить другую задачу, если задача была выполнена должным образом? - PullRequest
1 голос
/ 18 октября 2019

В приложении ASP.NET Core 2.2 Razor Pages я хочу выполнить длинную задачу, затем немедленно вернуть клиенту сообщение, затем выполнить другую задачу ЕСЛИ длиннуювыполнение задач завершается, как и ожидалось.

  • Задача A - это долгосрочный сценарий, который создает базу данных
  • Задача B вставляет некоторые данные в таблицы базы данных после завершения задачи A, если результаткак и ожидалось.

Я попробовал приведенный ниже код, но, похоже, приложение зависает на всю длину долго выполняющейся задачи.

public async Task<IActionResult> OnPost()
{
    if (ModelState.IsValid)
    {
        Task<int> TASK_A = sql_operationA();

        TASK_A.ContinueWith(async result => {
            if (await result > 0)
                sql_operationB());
                });

        RequestSuccess = true;
        StatusMessage = "TASK A WAS A SUCCESS PLEASE ALLOW 2-3 MINUTES TO SEE YOUR RESULTS.";
    }

    return Page();
}

1 Ответ

0 голосов
/ 18 октября 2019

async-await не изменит работу HTTP: 1 запрос имеет 1 ответ.

Если вам нужно, чтобы сервер отправил клиенту что-то, кроме ответа на запрос, используйте что-то вроде SignalR.

...