我試圖在異步控制器中進行異步操作。我所需要做的就是當我在視圖中按下按鈕時,它會給我一個提醒,表明工作已完成。當工作完成時,我可以做一些事情(例如,返回一個JSON或重定向到另一個視圖)。這裏是我的代碼:MVC中的異步操作不起作用
服務器端:
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");
它什麼都沒做!我認爲它運行在另一個線程或其他東西。
是什麼問題?
第二個問題是異步操作究竟意味着什麼?我從不希望我的行動等待陳述完成。我總是希望我的行爲將作業發送到執行隊列並返回給客戶端,並且當作業完成後,我可以通過某種方式通知客戶端。我怎樣才能通知客戶?與SignalR或什麼?
您是否有UploadComplete()Action的視圖。你怎麼說redirecttoactino什麼都不做? – ckv
當然,我有一個對應於我的重定向語句的視圖。但是當它運行時不會發生重定向!你可以試試這個,讓我知道是否爲你運行。事實上,我的UploadComplete()方法從未得到執行。斷點從未擊中。 – Pouyan
對不起,我不熟悉asyc等待的部分。所以我可能對你沒有幫助。 – ckv