我在MVC中 使用了 AsyncController,然后将一个Action 方法拆分成 XXXAsync 和 XXXCompleted ,然后调用也能调用,也能返回,但是发现,事实上不是异步的调用,当两个客户端ajax请求同时调用的时候,还是先执行完第一个再执行第二个。是我配置的不好还是 还未支持?看了MVC4的介绍,好像4里面就有支持异步调用了,是否3还未支持?
AsyncController 是異步的實現。異步的前後,是不缺定的哦。
那如何实现 AJAX异步调用的时候,2次调用同时执行(分线程)呢
@天浩-Jeffery: ajax 本來就是 異步調用。AsyncController是在collection中加入異步執行的。
你ajax 調用有先後,怎麼會同時執行呢?
@無限遐想: 现在的调用是 两次 AJAX 先后发出,后台跑完第一次请求后返回,再跑第二次。就是说第二次调用一直在等第一次调用完成。。。堵塞了。。。。
@天浩-Jeffery: 你用代碼調試,是在哪一步 堵塞了?
@無限遐想: 堵塞應該是正常的。是不是有共享資源的使用呢?
@無限遐想: 可能是 AsyncManager.OutstandingOperations.Increment 的問題。還沒有完成。
@無限遐想: 只要一到服务器端 就直接是依次运行了。。我做过调用IHttpAsyncHandler的,那个就是不同线程的,也就是说在后台是异步的。。。。。
@天浩-Jeffery: AsyncManager.OutstandingOperations.Increment會 掛起的。
有没有用AsyncManager 增加异步线程数呢?
或者直接升级到MVC4进行开发
MSDN上说了 “ASP.NET MVC 4 及更高版本中的 Controller 类支持异步模式。”
意思是不需要AsyncController,Controller本身已经实现IAsyncController接口
虽然是异步执行,但是异步执行指的是开线程,一般开完线程之后会有回调。我们一般都会等待返回值,所以在这个过程中,是执行完一个,执行另一个。但是这个时候主线程是不阻塞的。