Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个AJAX WebAPI异步调用随机延迟到达控制器方法_C#_Ajax_Asynchronous_Asp.net Web Api_Concurrency - Fatal编程技术网

C# 多个AJAX WebAPI异步调用随机延迟到达控制器方法

C# 多个AJAX WebAPI异步调用随机延迟到达控制器方法,c#,ajax,asynchronous,asp.net-web-api,concurrency,C#,Ajax,Asynchronous,Asp.net Web Api,Concurrency,我有3个异步WebAPI,在加载MVC页面的同时通过jQueryAjax调用。一个,有时两个或全部到达控制器方法的速度非常快,有时其中一个或两个延迟约3到10秒。每个异步方法的工作执行总是非常快(几毫秒)。我找到的唯一解决方案是禁用会话状态(这对我来说毫无意义,因为它在WebAPI中是默认禁用的,我已经尝试过了,但没有成功),我应该使用异步方法来并行运行来自同一会话的所有3个请求,这是我已经在做的 我也尝试过,如果我正在使用的是IIS Express,但IIS也有同样的效果。还尝试了各种浏览器,

我有3个异步WebAPI,在加载MVC页面的同时通过jQueryAjax调用。一个,有时两个或全部到达控制器方法的速度非常快,有时其中一个或两个延迟约3到10秒。每个异步方法的工作执行总是非常快(几毫秒)。我找到的唯一解决方案是禁用会话状态(这对我来说毫无意义,因为它在WebAPI中是默认禁用的,我已经尝试过了,但没有成功),我应该使用异步方法来并行运行来自同一会话的所有3个请求,这是我已经在做的

我也尝试过,如果我正在使用的是IIS Express,但IIS也有同样的效果。还尝试了各种浏览器,但问题相同

我在这里真的迷路了,有人有什么办法或想法可以阻止我的请求?请记住,请求是随机阻塞的,有时可以,但大多数情况下不会,另外两个请求的延迟总是3秒和10秒

我的客户端代码(所有3个调用如下所示):

$.ajax({
键入:“获取”,
url:“/api/follow/getFollows/”+this.userId,
contentType:“应用程序/json”,
数据类型:“json”,
processData:false,
成功:(数据)=>{
此.handleLoaded如下($(“#followsList”),数据);
},
错误:(数据)=>{alert(“error”);}

});首先看一下:


而且,

在检查IIS日志后,我确信浏览器是这里的瓶颈。在彼此之后快速触发几个AJAX请求并不能很好地工作。这就是为什么我会有这么大的延误

我通过使用超时机制来解决这个问题,以确保不是所有的请求都同时针对浏览器发出

我正在使用typescript,但这是我的解决方案(可能不是最好的解决方案,但它很有效)

我创建了一个处理程序,该处理程序对函数调用进行排队,并使用指定的超时执行它们:

模块实用程序{
导出类AjaxRequestHandler{
专用静态ajaxQueue:函数[]=[];
已执行的专用静态QueueFunctions:boolean[]=[];
静态排队AjaxRequest(ajaxFunction:Function):void{
this.ajaxQueue.push(ajaxFunction);
this.queueFunctionExecuted.push(false);
var interval=setInterval($.proxy(()=>{
if(this.ajaxQueue[0]==ajaxFunction&&this.queueFunctionExecuted[0]==false&&this.queueFunctionExecuted.length>0){
ajaxFunction();
this.queueFunctionExecuted[0]=true;
setTimeout($.proxy(()=>{
这是.ajaxQueue.shift();
this.queueFunctionExecuted.shift();
},本)100);
}
},此,ajax函数)
, 20);
setTimeout($.proxy(()=>{
间隔时间;
},间隔)10000);
}
}

}
听起来可能是网络延迟,因为它是相对间歇性的。要记住的另一件事是,您的ajax调用可能会连续快速启动,但不会同时启动。