C# AsyncController:具有2个异步方法的干扰
我有一个AsyncController,它有两个AsyncMethods。 一个叫做GetMessages,另一个叫做Check。 看起来,一个调用阻止了另一个调用,可能是因为两个调用都调用了这个.AsyncManager.OutstandingOperations.Increment(); 他们是否共享同一个AsyncManager? 正确的方法是什么? 我是否必须有2个异步控制器,以确保它们不会相互妨碍 更新: 这两种方法的代码与此处发布的代码类似: 实际上,它是同一个控制器,只添加了Check/CheckCompleted。 有时,必须触发“检查”,以便“GetMessages”返回C# AsyncController:具有2个异步方法的干扰,c#,asp.net-mvc-3,asynccontroller,C#,Asp.net Mvc 3,Asynccontroller,我有一个AsyncController,它有两个AsyncMethods。 一个叫做GetMessages,另一个叫做Check。 看起来,一个调用阻止了另一个调用,可能是因为两个调用都调用了这个.AsyncManager.OutstandingOperations.Increment(); 他们是否共享同一个AsyncManager? 正确的方法是什么? 我是否必须有2个异步控制器,以确保它们不会相互妨碍 更新: 这两种方法的代码与此处发布的代码类似: 实际上,它是同一个控制器,只添加了Che
更新2:两种方法的等待时间都是60秒。我现在将一个减少到5个,这很有帮助,但我认为这只是一个攻击。他们不应该阻止。您观察到的阻塞可能是由于这两种方法都使用会话,并且由于会话不是线程安全的,所以如果您有来自同一会话的两个并行请求(例如AJAX请求),ASP.NET会阻塞访问 因此,请尝试使用以下属性对这些操作禁用所有会话:
[SessionState(SessionStateBehavior.Disabled)]
他们不应该阻挡。您观察到的阻塞可能是由于这两种方法都使用会话,并且由于会话不是线程安全的,所以如果您有来自同一会话的两个并行请求(例如AJAX请求),ASP.NET会阻塞访问 因此,请尝试使用以下属性对这些操作禁用所有会话:
[SessionState(SessionStateBehavior.Disabled)]
不,我使用[SessionState(SessionStateBehavior.ReadOnly)],所以应该可以。@esskar,您是否尝试完全禁用会话?不,但我已经知道这不是一个选项,因为我必须从中读取。@esskar,至少它可以让您尝试缩小问题的范围,当我遇到一些问题时,我首先尝试的是:通过删除部分代码来缩小范围,直到找到问题的部分。不,我使用[SessionState(SessionStateBehavior.ReadOnly)],这样就可以了。@esskar,你试过完全禁用会话吗?不,但我已经知道这不是一个选项,因为我必须阅读它。@esskar,至少它可以让你缩小你的问题范围,这是我遇到问题时尝试的第一件事:通过删除部分代码来缩小范围,直到我找到有问题的部分。这完全不同。我注意到,它没有阻塞,但由于启用了ajax缓存,请求根本没有被触发。$。ajaxSetup({cache:false});helpedit完全不同。我注意到,它没有阻塞,但由于启用了ajax缓存,请求根本没有被触发。$。ajaxSetup({cache:false});帮助