.net MVC AsyncController异步请求处理
1.控制器继承AsyncController
2.使用ajax请求异步方法:
public int ExecDataResult(long id)
{
return Task.Factory.StartNew(() => { return ExecData(id); }).ContinueWith<int>(t => { return t.Result; }).Result;
}
如果页面停留在调用方法的页面那么当 ExecDataResult方法执行完毕后ajax获取到返回值。
如果 ExecDataResult方法耗时较长,在此期间进行了页面跳转操作,那么ExecDataResult方法依然可正常执行,可是ajax请求的连接应该失效了吧,这样的话页面就无法获取到返回值了,请问我这样理解对吗?
然而我现在却需要在ExecDataResult方法执行完毕后在页面右下角弹出一个小框进行提示,我能想到的办法就是在外层套一个iframe,使用父级页去请求ExecDataResult方法,这样iframe内部的页面无论怎么跳转请求链接都能保持,弹窗提示页没问题。然而我现在做的主要是维护而不是开发工作,整个系统之前的人已经做好了我不能去更改,这我就想不到还有什么其他的实现方式了,请指教!
------解决方案--------------------有问题找百度.........
------解决方案--------------------JS出发页面的onload事件,弹出窗口。
------解决方案--------------------此异步非彼异步
MVC中的异步控制器对于你的编程模型没有任何影响,也没有特别的作用,它仅仅提高了性能——ASP.NET在执行一个异步控制方法的同时,线程还可以响应别的请求,而提高了吞吐。
所以你该怎么做怎么做,用ajax啦,双工通讯啦,等等,和用不用异步控制器没有一毛钱关系。
------解决方案--------------------
var result = Task.Factory.StartNew(() => { return ExecData(id); }).ContinueWith<int>(t => { return t.Result; });
result.Wait();
ret result.Result;
------解决方案--------------------等ajax响应完了,就能取到了吧。
------解决方案--------------------
那你的需求有问题。HTTP是无状态的。不可能客户端断开了,再接受服务器端的值。