Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AsyncController:具有2个异步方法的干扰_C#_Asp.net Mvc 3_Asynccontroller - Fatal编程技术网

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

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

我有一个AsyncController,它有两个AsyncMethods。 一个叫做GetMessages,另一个叫做Check。 看起来,一个调用阻止了另一个调用,可能是因为两个调用都调用了这个.AsyncManager.OutstandingOperations.Increment(); 他们是否共享同一个AsyncManager? 正确的方法是什么? 我是否必须有2个异步控制器,以确保它们不会相互妨碍

更新: 这两种方法的代码与此处发布的代码类似:

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


更新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});帮助