1

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

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

如果我$.ajax同时对处理程序进行 2 次调用,我将在 2 秒后得到第一个响应,在 4 秒后得到下一个响应。

有什么方法可以让我的 GenericHandler.ashx 同时处理两个 ajax 调用?

4

3 回答 3

2

您似乎需要的是异步 HTTP 处理程序

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

您当前方法的主体将位于StartAsyncTask提供的示例的方法主体中

于 2013-09-02T13:18:52.193 回答
0

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

if (Request.Headers["X-Requested-With"] != "XMLHttpRequest")
{
    Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js");
}
于 2013-09-02T13:16:36.867 回答
0

在没有看到 $.ajax 的参数的情况下,我猜您需要将 async 设置为 true。

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

另外,请注意不同的浏览器会根据它一次允许的请求数做出不同的反应。

检查异步

于 2013-09-02T13:17:17.907 回答