我在控制器内部有一些动作:
public class ValuesController : Controller
{
[HttpPost]
public string GetInfo()
{
Thread.Sleep(30000); // logics imitation
return "result";
}
}
当我从客户端发送有关此操作的请求时,我将接收"主线程阻塞" (如死锁)等待"逻辑模仿" 我怎么能阻止它? 已经尝试过了:
public class ValuesController : Controller
{
[HttpPost]
public async Task<string> GetInfo()
{
return await Task.Factory.StartNew(() =>
{
Thread.Sleep(30000);
return "result";
});;
}
}
不工作......
已经看了(ASP.NET MVC and Ajax, concurrent requests?),但SessionState.ReadOnly方式不适合我......
也尝试使用.svc服务而不是控制器操作,但也有同样的麻烦。
答案 0 :(得分:1)
这个问题由我的同事发布。是的,我们有这样的情况,我们需要“解雇”并且忘记&#34; (我们试图异步调用操作,当同时执行不同的操作时,但我们仍然设法获得的是一个接一个地调用操作)
答案 1 :(得分:1)
MVC默认阻止并行会话,只有一种方法可以避免它:
[SessionState(SessionStateBehavior.ReadOnly)]
Attribute
上的{p> Controller
,明确地将逻辑与写作和阅读会话分开。