2017-10-09 23 views
0

我新的ASP.NET核心,所以也许我做错了什么,这是我的问题:ASP.NET MVC的核心启动新的线程从动作

我需要做什么:后从Azure存储在后台加载启动页面开始加载应用程序特定数据并显示它在前端

我做了什么来实现这一状态:

public ViewResult Index() 
{ 
    var homeModel = new HomeModel(); 
    Task.Run(() => 
    { 
     // Some specific work to do... 
     System.Threading.Thread.Sleep(4000); 
    }); 

    return View(homeModel); 
} 

当我运行这段代码前端视图不会显示,直到任务没有完成,即使它是不同的托管线程(也尝试做与新的Thread.Start(()=> ...)相同;)。

我的问题是:这是什么原因导致这种行为?正如我所说我是新的ASP.NET核心,我没有与以前的版本的ASP.NET工作。

我有一些想法如何解决这个问题,但我想知道做出来,明白其中的道理:)

附注:以正确的方式我使用SignalR从后端更新视图。

+0

在任何情况下,您的应用程序启动作业方法都是错误的。看看IApplicationLifetime接口。 [这里](https://stackoverflow.com/questions/45013054/asp-net-core-long-running-task)是一个关于它的问题 – Tewr

+0

谢谢,现在我有线索寻找 –

+0

@Tewr,请发表您的评论作为这个问题的答案,以便我可以将其标记为解决方案 –

回答

-1
ThreadStart starter = delegate { SomeVoid(somevar); }; 
    Thread tr = new Thread(starter); 
    tr.IsBackground = true; 
    tr.Start(); 
    tr.Join(); 

如果需要螺纹环,遗憾的名单更多话题 使用,如果我不帮你

+0

而且您可以使用class backgroundworker搜索代码。 –

+0

正如我所说,我试图明确使用线程,我需要这是正确的方式来做到这一点。谢谢。 –

+0

https://ww.madskristensen.net/post/dont-use-the-threadpool-in-aspnet –