在.ashx中同时处理多个$ .ajax调用

时间:2013-09-02 13:08:11

标签: c# asp.net ajax multithreading

我的GenericHandler.ashx中有以下方法:

private void T1()
{
    System.Threading.Thread.Sleep(2000);
    Ctx.Response.Write(Serializer.Serialize(new { foo = "bar" }));
}

如果我同时调用2 $.ajax - 调用处理程序,我会在2秒后得到第一个响应,然后在4之后得到第一个响应。

有没有办法让我的GenericHandler.ashx同时处理两个ajax调用?

3 个答案:

答案 0 :(得分:2)

<强> What you seem to need is a Asynchronous HTTP Handler

  

在处理异步HTTP处理程序期间,ASP.NET将其放入   通常用于外部进程的线程   进入线程池,直到处理程序从中接收回调   外部过程。这可以防止线程阻塞和改进   性能,因为只能执行有限数量的线程   同时。如果许多用户请求同步HTTP处理程序   依靠外部流程,操作系统可以快速耗尽   线程因为许多线程被阻塞并等待   外部过程。

您当前方法的正文将位于所提供示例的StartAsyncTask方法正文中

答案 1 :(得分:0)

您需要在会话期间加载一次jquery.unobtrusive-ajax。检查它是否已经加载:

if (Request.Headers["X-Requested-With"] != "XMLHttpRequest")
{
    Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js");
}

答案 2 :(得分:0)

没有看到$ .ajax的参数,我猜你需要将async设置为true。

$.ajax({
   url: "page.ashx",
   async: true
});

另外,请注意不同浏览器的反应取决于它一次允许的请求数量。

Check out async