public JsonResult GetScore(int StudentID = 0)
{
//fetch the score for the user
//--Call sendReport
//return the score to the calling method
}
public void SendReport(int StudentID = 0)
{
//Logic to get the detaied marks and prepare the report's PDF
//Mail the generated PDF back to student
}
在我的网络应用程序中,学生点击分数时学生将在屏幕上获得他/她的分数,并将详细报告的PDF邮寄到他/她的挂号邮件。
现在问题是我想在后台运行SendReport,这样学生就可以立即知道他/她的分数而无需等待。
我已经完成了this question,但它给了我无效参数的错误。
答案 0 :(得分:2)
public JsonResult GetScore(int StudentID)
{
//fetch the score for the user
Task.Factory.StartNew(() => SendReport(StudentID));
//return the score
}
答案 1 :(得分:1)
你可以在一个新线程中调用它
new Thread(SendReport(StudentID)).Start();
答案 2 :(得分:1)
如果您正在寻找解决此问题的快速而肮脏的解决方案,那就是让您的控制器看起来像这样:
public JsonResult GetScore(int StudentID = 0)
{
//fetch the score for the user
//return the score to the calling method
}
public JsonResult SendReport(int StudentID = 0)
{
//Logic to get the detaied marks and prepare the report's PDF
//Mail the generated PDF back to student
//Return a JsonResult indicating success
}
...然后对您的控制器进行两次 JQuery调用。一个获得分数,一个开始报告。您可以在获得分数后立即显示分数,并且报告仍然会在后台显示。
请记住,如果报告花费的时间超过几秒钟来生成和发送电子邮件,那么您真的应该考虑将该执行移动到您通过MVC 激活的服务,因为在控制器方法占用Web服务器资源,直到它完成。
有关执行此操作的详细信息,请参阅新的MVC async documentation。