c# - 我如何在 mvc 中启动任务并在任务完成时收到通知?

标签 c# asp.net-mvc asynchronous

我以前从未尝试过在 mvc 中运行异步任务,所以我不确定该往哪个方向走。

我有一个类可以根据大量数据生成一个 excel 文件,这可能需要一些时间。我想要它,所以当用户单击一个链接时,他们会收到一条消息,说“完成后您会收到通知”并且任务开始,然后他们可以继续使用网络应用程序,一旦这是他们就会收到屏幕通知完成,最好通过 ajax 可以同时运行几个任务。如果我能看到任务是否仍在运行,那就太好了。

这些任务从不安排,总是“按需”

哪种方法最适合这个?我看到有 system.threading,signalr , quartz.net等,但有些可能有点矫枉过正。

谢谢,

山姆

最佳答案

在客户端,您必须创建 javascript 轮询代码。
像这样:

(function poll(){
   setTimeout(function(){
      $.ajax({ url: "server/checkStatus", success: function(data){
        // check notification data and react accordingly
      }, dataType: "json"});
  }, 30000);
})();

另见:

在服务器端创建这样的对象实例(简化):

class MyTasks
{
   Dictionary<int, Task> tasks;

   public bool AllTasksDone {get;}
   public bool GetNumberOfRunnigTasksForUser(int userId){}

   public void AddTask(int userId, Task task){}
}

您可以将它放在 ApplicationSession 中(每个用户 session 一个实例)。 并用它来回答投票请求。

可以轻松创建任务 Task.StartNew(MethodName)Task.StartNew(()=>{your code})

只是提一下 - 还有另一种方法 - WebSockets。但是武器太重了。你可能不想要它。

关于c# - 我如何在 mvc 中启动任务并在任务完成时收到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803298/

相关文章:

c# - 使用 itextSharp 从 pdf 中提取文本会更改数字

c# - ToolStripMenuItem 和 Control 的共享基础?

c# - ASP.NET MVC, 'Ticket Required' 属性

c# - Asp.Net 按钮单击 UpdatePanel 内的 Repeater 内的事件

asp.net - 如何在 ASP.NET MVC5 中将字符串从 Controller 传递到 View

asp.net-mvc - 在 ASP.NET MVC 中异步使用 WebClient?

javascript - VS 代码在使用 Angular async 和 elvis 运算符与 observable 时出现 "identifier not defined"错误

javascript - 如何将 Child_process.spawn 的 "Promise"语法转换为 "async/await"语法

c# - ASP.net MVC - AsyncController 和 Session

c# - 鼠标光标在所选文本上闪烁 - 如何防止这种情况发生?