C#中的后台任务

时间:2013-01-21 13:50:40

标签: c#-4.0 asp.net-mvc-4 multitasking

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,但它给了我无效参数的错误。

3 个答案:

答案 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