非同期コントローラーで非同期アクションを作成しようとしています。私がする必要があるのは、ビューでボタンを押すと、作業が完了のために送信されたことを示すアラートが表示されることだけです。仕事が終わったら、何かをすることができます(たとえば、jsonを返すか、別のビューにリダイレクトします)。これが私のコードです:
サーバ側:
public void DoWork()
{
var a = MakeADelay();
}
public async Task<ActionResult> MakeADelay()
{
await Task.Delay(5000);
return RedirectToAction("UploadComplete");
}
public ActionResult UploadComplete()
{
return View();
}
これは私のクライアント側のコードです:
$("#btnAsync").click(function () {
$.ajax({
url: '/Upload/DoWork',
type: "post",
success: function () {
alert("Work in Progress!!");
}
});
});
このコードを実行すると、すべてが期待どおりに実行されるように見えますが、サーバー側のコードがステートメントreturn RedirectToAction("UploadComplete");
に到達すると、何もしません! 別のスレッドか何かで実行されていると思います。
何が問題ですか ?
2 番目の質問は、aync アクションの実際の意味は何ですか? ステートメントが完了するまでアクションを待機させたくありません。私は常にアクションがジョブを実行キューに送信し、クライアントに戻ることを望んでいます。ジョブが完了したら、何らかの方法でクライアントに通知できます。とにかくクライアントに通知するにはどうすればよいですか? SignalRか何かで?