创建一个管理这个长时间运行的操作的静态类。此类将负责创建线程来执行任务,并提供一种检查任何正在进行的操作状态的方法(即,它是否仍在进行中或已完成,如果是,结果是什么)。
然后,您的 MVC 控制器方法使用此类来完成工作并向用户呈现状态信息或完成的处理数据。
像这样的东西:
public ActionResult GetSomething(String id) {
TaskResult result = TaskClass.GetStatus( id );
if( result == null ) { // the task has not been run, so start it up
TaskClass.StartNew( id );
return new View("PleaseWait");
} else if( !result.IsFinished ) {
return new View("PleaseWait");
} else {
return View("Results", result);
}
}
public static class TaskClass {
private static Dictionary<String,TaskResult> _tasks;
public static TaskResult GetStatus(String id) {
// TODO: Make this code thread-safe
if( _tasks.ContainsKey(id) ) return _tasks[id];
return null;
}
public static void Start(String id) {
_tasks.Add( id, new TaskResult("Working") );
Thread thread = new Thread( SomeExpensiveOperation );
thread.Start( id );
}
}
在 SomeExpensiveOperation 结束时,会有代码将 TaskResult 标记为已完成。