可能會去像這樣
public ActionResult CallBack()
{
if (AcceptPayment() == "OK")
{
// simply launches the task and moves on
Task.Run(LenghtyTask());
}
return RedirectToUrl("MyWebSite");
}
現在你頁面上:RedirectToUrl(「MyWebSite」)
你是要去必須建立像TEJS一個Ajax請求指出的,可以通知用戶在任務實際開展AJAX ..in情況下,前完成
public ActionResult IsTaskFinished()
{
// No clue where your transaction is, but your gonna need to know it to check it's state
return JSON(SomeClass.Current.IsTaskFinished(ContextBoundObject.Transaction.Id));
}
你可能會想呼叫SomeClass.Current.IsTaskFinished(ContextBoundObject.Transaction.Id)
上/ MyWebSite轉換已經完成。
function isTaskFinished() {
$.post("/IsTaskFinished").always(function(data) {
if (!!data) {
setTimout(isTaskFinished, 3000);
}
else {
// yay i'm done, inform user !
}
});
}
當然,你必須在重試次數限制,錯誤處理等
您是否在嘗試修復用戶需要等待很長時間的事實,或者您是否試圖讓這個冗長的進程停止對目前的整體可擴展性造成影響? –
你的實際問題是,它聽起來像你想要客戶端更新與一些用戶界面,而冗長的任務正在運行,是嗎?如果是這樣,那麼這個問題或多或少沒有意義,因爲您需要創建一個ajax請求端點來確定長時間運行的任務的狀態。 – Tejs
異步實際上是啓動一個線程,但是您只是釋放服務器資源,而不是真的讓用戶更快。 – Robert