【发布时间】:2023-03-24 09:05:01
【问题描述】:
我在控制器里面有一些动作喜欢:
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 服务代替控制器操作,但有同样的问题。
【问题讨论】:
-
为什么要让线程休眠?
-
因为我会“等待”外面的另一个结果。
-
只是为了澄清 - 你真正想要完成的是什么?您是否只想让客户“一劳永逸”?是否要确保 ASP.Net 线程池中的线程可用于请求(而不是长时间运行的任务)?
标签: asp.net ajax asp.net-mvc multithreading