Выполнить код асинхронно и вернуть действие MVC - PullRequest
0 голосов
/ 06 января 2019

У меня есть приложение MVC, в котором при посещении определенного URL-адреса я хочу начать выполнение некоторого кода инициализации, который занимает около 4 секунд, но также немедленно возвращает им View(). В настоящее время я делаю это:

public IActionResult Inbound(string uuid)
{
    using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://.../call/setup"))
    {
        requestMessage.Headers.Add("uuid", uuid);
        Clients.httpClient.SendAsync(requestMessage);
    }
    return View();
}

public IActionResult Setup([FromHeader] string uuid)
{
    InitialiseStuff(uuid); //This takes several seconds to execute
    return StatusCode(200);
}

Это самый оптимальный способ сделать это? Код инициализации не влияет на представление, возвращаемое из «входящего».

Просто чтобы уточнить: Я хочу вернуть представление и затем инициализировать некоторый не связанный код в фоновом режиме. В настоящее время я просто делаю асинхронный запрос GET для отдельного действия, которое затем выполняет код. Я хочу знать, является ли это лучшим решением.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете попробовать Начать новую тему для InitialiseStuff(), пример samll, как показано ниже:

    [HttpGet]
    public IActionResult Setup([FromHeader] string uuid)
    {
        InitialiseStuff(uuid); //This takes several seconds to execute
        return StatusCode(200);
    }
    public Task InitialiseStuff(string uuid)
    {
        Task.Factory.StartNew(() => {
            Thread.Sleep(TimeSpan.FromSeconds(10));
            Debug.WriteLine(uuid);
        });
        return Task.CompletedTask;
    }
0 голосов
/ 06 января 2019

Один из способов сделать это - отправить страницу без содержимого, а когда страница загружена, сделать ajax-вызов для получения содержимого.

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