可能会像这样
public ActionResult CallBack()
{
if (AcceptPayment() == "OK")
{
// simply launches the task and moves on
Task.Run(LenghtyTask());
}
return RedirectToUrl("MyWebSite");
}
现在在您的页面上:RedirectToUrl("MyWebSite")
您将不得不像 Tejs 指出的那样设置一个 ajax 请求,它可以在任务完成时通知用户
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)
在实际启动 ajax 之前调用 /MyWebSite ..以防事务已经完成。
function isTaskFinished() {
$.post("/IsTaskFinished").always(function(data) {
if (!!data) {
setTimout(isTaskFinished, 3000);
}
else {
// yay i'm done, inform user !
}
});
}
当然,您必须考虑重试限制、错误处理等。