我有一些动作里面控制器喜欢:MVC Ajax请求不阻塞主线程
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服务,而不是控制器也尝试 - 但有同样的麻烦。
为什么你想要线程睡觉呢? – 2015-02-11 14:05:30
因为我会'等待'来自外部的另一个结果。 – 2015-02-11 14:21:54
只是为了澄清 - 你真的想完成什么?你只是想让客户“开火并忘记”?你想确保ASP.Net线程池中的线程可用于请求(而不是长时间运行的任务)吗? – 2015-02-11 16:45:03