我以前从未尝试过在 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){}
}
您可以将它放在 Application
或 Session
中(每个用户 session 一个实例)。
并用它来回答投票请求。
可以轻松创建任务 Task.StartNew(MethodName)
或 Task.StartNew(()=>{your code})
只是提一下 - 还有另一种方法 - WebSockets。但是武器太重了。你可能不想要它。
关于c# - 我如何在 mvc 中启动任务并在任务完成时收到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803298/