异步执行代码并返回MVC操作

时间:2019-01-06 00:34:21

标签: c# asynchronous asp.net-core-mvc

我有一个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 :(得分:0)

一种方法是发送不包含任何内容的页面,并在页面加载后进行ajax调用以获取内容。

答案 1 :(得分:0)

您可以尝试为InitialiseStuff()启动一个新线程,这是一个类似以下示例:

    [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;
    }