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
}

私のWebアプリケーションでは、学生がスコアをクリックすると、画面にスコアが表示され、詳細なレポートの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
}

...次に、コントローラーに対して2つのJQuery呼び出しを行います。1つはスコアを取得し、もう1つはレポートを開始します。スコアを取得するとすぐに表示できますが、レポートは引き続きバックグラウンドで動作します。

レポートの生成と電子メール送信に数秒以上かかる場合は、その実行をMVCを介してアクティブ化するサービスに移動することを検討する必要があります。これは、コントローラーメソッドで実行すると、完了するまでWebサーバーリソースが拘束されるためです。 。

これを行う方法の詳細については、新しいMVC非同期ドキュメントを参照してください。

于 2013-01-21T21:24:43.253 に答える
1

新しいスレッドで呼び出すことができます

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