asp.net - MVC Ajax请求不阻塞主线程

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

我在 Controller 内有一些操作,例如:

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 服务代替 Controller 操作,但遇到了同样的问题。

最佳答案

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

[SessionState(SessionStateBehavior.ReadOnly)]

Controller 上的属性,并通过使用写入和读取 session 清楚地分离逻辑。

关于asp.net - MVC Ajax请求不阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456285/

相关文章:

asp.net - 如何在过期之前延长asp.net中的 session 超时

php - 在 ajax 函数中隐藏 jquery 元素

c# - RenderAction 差异

javascript - 如何创建 jQuery 数据表向下钻取行?

c# - DevExpress ASPxComboBox 不过滤

ajax - JQuery Datepicker 获取所选日期

javascript - JSONP ajax 回调失败

c# - VS C# 数据模型 : CS1061: 'entity' does not contain a definition for 'tablename'

c# - 在没有 IIS 的情况下托管 MVC Web 应用程序

javascript - 部分 View 中的明确值(多个)