AsyncController:具有2个异步方法的干扰

时间:2011-07-08 18:13:00

标签: c# asp.net-mvc-3 asynccontroller

我的AsyncController有2个AsyncMethods。 一个叫GetMessages,另一个叫Check。 似乎,一个调用阻塞了另一个,可能是因为它们都调用了这个.AsyncManager.OutstandingOperations.Increment(); 他们共享相同的AsyncManager吗? 这样做的正确方法是什么? 我是否必须拥有2个AsyncController以确保它们不会彼此进入?

更新: 这两种方法的代码类似于此处发布的代码:Async operation completes, but result is not send to browser

实际上,它是同一个控制器,只添加了Check / CheckCompleted。 有时,必须触发“检查”,以便“GetMessages”返回

Update2:这两种方法都有等待60秒的等待时间。我现在把它减少到5,这有助于它,但我认为这只是一个黑客。

1 个答案:

答案 0 :(得分:1)

他们不应该阻止。您正在观察的阻塞可能是由于两个方法都使用Session并且因为Session不是线程安全的,所以如果您有来自同一会话的两个并行请求(例如AJAX请求),则ASP.NET会阻止访问。

因此,请尝试使用以下属性修复这些操作的所有会话:

[SessionState(SessionStateBehavior.Disabled)]