У меня есть довольно простой контроллер:Почему поток контроллера заблокирован, если я использую сеанс?
public class HomeController : Controller
{
public ActionResult Index()
{
Session["SomeData"] = "123";
return View();
}
[HttpPost]
public ActionResult LongTest()
{
Thread.Sleep(5000);
return Json(new { Text = DateTime.Now.ToString("hh:mm:ss.fff") + " - LongTest"});
}
[HttpPost]
public ActionResult CantAnswer()
{
return Json(new { Text = DateTime.Now.ToString("hh:mm:ss.fff") + " - CantAnswer"});
}
}
Я использую эти методы из стороны клиента этот путь:
<script type="text/javascript">
$(document).ready(function() {
$('#btnLongOperation').click(function() {
$.post("/Home/LongTest", null, function (data) {
$('#result').text(data.Text);
}, "json");
});
$('#btnWnotWork').click(function() {
$.post("/Home/CantAnswer", null, function (data) {
$('#result').text(data.Text);
}, "json");
});
});
</script>
<div>
<input id="btnLongOperation" type="button" value="Long operation"/>
<input id="btnWnotWork" type="button" value="Won't work"/>
</div>
<div id="result">
Если я нажимаю на первую кнопку, а затем, не дожидаясь 5 секунд нажмите вторую , мое второе действие не будет вызываться. Если вы удалите строку с помощью сеанса в методе Init, вы увидите, что действия можно вызвать, не дожидаясь друг друга. Однако, как только вы используете объект сеанса, вы не увидите результат второго действия до завершения первого. Может ли кто-нибудь объяснить это поведение asp.net mvc?