Controller actions appear to be synchronous though on different requests?
        Posted  
        
            by 
                Oded
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Oded
        
        
        
        Published on 2011-01-13T13:47:12Z
        Indexed on 
            2011/01/13
            13:53 UTC
        
        
        Read the original article
        Hit count: 276
        
I am under the impression that the below code should work asynchronously.
However, when I am looking at firebug, I see the requests fired asynchronously, but the results coming back synchronously:

Controller:
[HandleError]
public class HomeController : Controller
{
  public ActionResult Status()
  {
      return Content(Session["status"].ToString());
  }
  public ActionResult CreateSite()
  {
      Session["status"] += "Starting new site creation";
      Thread.Sleep(20000); // Simulate long running task
      Session["status"] += "<br />New site creation complete";
      return Content(string.Empty);
  }
}
Javascript/jQuery:
$(document).ready(function () {
    $.ajax({
        url: '/home/CreateSite',
        async: true,
        success: function () {
            mynamespace.done = true;
        }
    });
    setTimeout(mynamespace.getStatus, 2000);
});
var mynamespace = {
    counter: 0,
    done: false,
    getStatus: function () {
        $('#console').append('.');
        if (mynamespace.counter == 4) {
            mynamespace.counter = 0;
            $.ajax({
                url: '/home/Status',
                success: function (data) {
                    $('#console').html(data);
                }
            });
        }
        if (!mynamespace.done) {
            mynamespace.counter++;
            setTimeout(mynamespace.getStatus, 500);
        }
    }
}
Addtional information:
- IIS 7.0
- Windows 2008 R2 Server
- Running in a VMWare virutual machine
Can anyone explain this? Shouldn't the Status action be returning practically immediately instead of waiting for CreateSite to finish?
Edit:
How can I get the long running process to kick off and still get status updates?
© Stack Overflow or respective owner