ASP.NET Core MVC从一个动作开始新的线程

时间:2017-10-09 11:21:05

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

我是ASP.NET Core的新手,所以也许我做错了什么,这是我的问题:

我需要什么:加载开始页面后,开始在后台加载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 Core的新手,而且我还没有使用过以前版本的ASP.NET。

我有一些想法如何解决这种行为,但我想知道正确的方法来理解它的原因:)

P.S。我使用SignalR从后端更新视图。

2 个答案:

答案 0 :(得分:0)

您的应用程序启动作业方法是错误的。看看IApplicationLifetime界面。 Here是一个关于它的问题

答案 1 :(得分:-2)

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

如果需要更多线程 使用线程和循环列表,对不起,如果我不帮助你