我有一些動作裏面控制器喜歡: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