日期:2014-05-16  浏览次数:20410 次

.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响应完了,就能取到了吧。
------解决方案--------------------
引用:
Quote: 引用:


var result = Task.Factory.StartNew(() => { return ExecData(id); }).ContinueWith<int>(t => { return t.Result; });
result.Wait();
ret result.Result;


问题是在这个返回之前页面就跳转了,返回值怎么取呢?


那你的需求有问题。HTTP是无状态的。不可能客户端断开了,再接受服务器端的值。