0

我读过几篇文章,不清楚正确的方法。所以我的基本想法是我可以创建一个线程并运行它,然后让控制器转到另一个视图...在那个视图中我可以对控制器上另一个方法的 jquery 调用,该方法使用计时器检查每 5 秒创建了多少行...这有意义吗?

我不需要从对长时间运行的进程的调用中返回的值。我只需要它启动,下一页将报告进度...

那么我要使用新的 async/await 吗?任务?线?

我想我不需要使用 async/await 因为我对返回值不感兴趣?

编辑:

所以你说下面的代码是一件坏事,因为我的代码已经停止运行并且对httpcontext一无所知,所以永远不会发生'catch'?

   public ActionResult ValidateUnprocessedData()
    {
        //Check table for jobs to be started
        List<TaskInstance> taskInstancesNotStarted = InstanceExpert.GetAllTaskInstancesNotStarted();

        try
        {
            Thread thread = new Thread(() => ValidateProcesses(taskInstancesNotStarted));
            thread.Start();
        }
        catch (Exception ex)
        {
            InstanceErrorExpert.LogErrorGeneric(ex.Message);
        }

        return View("Index");
    }
4

1 回答 1

2

您(可能)不想在 ASP.NET 中执行长时间运行的进程,因为它不是为它设计的

你最好使用一个实际的工作服务(例如,Azure 工作角色或 Win32 服务),将其结果放在持久存储(例如,Azure 表)中。然后您可以使用 ASP.NET 进行轮询。

于 2013-04-15T16:27:00.283 回答