MVC Ajax请求没有阻塞主线程

时间:2015-02-11 14:01:27

标签: asp.net ajax asp.net-mvc multithreading

我在控制器内部有一些动作:

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服务而不是控制器操作,但也有同样的麻烦。

2 个答案:

答案 0 :(得分:1)

这个问题由我的同事发布。是的,我们有这样的情况,我们需要“解雇”并且忘记&#34; (我们试图异步调用操作,当同时执行不同的操作时,但我们仍然设法获得的是一个接一个地调用操作)

答案 1 :(得分:1)

MVC默认阻止并行会话,只有一种方法可以避免它:

[SessionState(SessionStateBehavior.ReadOnly)]
Attribute上的{p> Controller,明确地将逻辑与写作和阅读会话分开。