我有一个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请求,然后执行代码。我想知道这是否是最佳解决方案。
答案 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;
}