2
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,这样学生就可以立即知道他/她的分数而无需等待。

我已经完成了这个问题,但它给了我无效论点的错误。

4

3 回答 3

2
public JsonResult GetScore(int StudentID)
{
    //fetch the score for the user
    Task.Factory.StartNew(() => SendReport(StudentID));
    //return the score
}
于 2013-01-21T13:54:47.553 回答
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 异步文档

于 2013-01-21T21:24:43.253 回答
1

你可以在一个新线程中调用它

new Thread(SendReport(StudentID)).Start();
于 2013-01-21T13:54:50.503 回答