我试图避免使用nancyfx应用程序,一次多次执行相同的端点。
我尝试了类似下面的内容
pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx =>
{
Console.WriteLine("Starting url: " + ctx.Request.Url.ToString());
if (ExecutingRequests.Instance.AlreadyExecuting(ctx.Request.Url.ToString()))
{
Console.WriteLine("bypass " + ctx.Request.Url.ToString());
var response = new Response();
response.Headers.Add("bypass", "bypass");
response.StatusCode = HttpStatusCode.RequestTimeout;
return response;
}
ExecutingRequests.Instance.StartRequest(ctx.Request.Url.ToString());
return null;
});
pipelines.AfterRequest.AddItemToEndOfPipeline(ctx =>
{
if (!ctx.Response.Headers.ContainsKey("bypass"))
ExecutingRequests.Instance.EndRequest(ctx.Request.Url.ToString());
});
为了测试行为,我一个接一个地发送2个请求。
第一个请求将其自身添加到ExecutionRequests(类只包含执行请求的URL的线程安全集合),但是当我尝试在第一个请求完成并返回响应之前发送第二个请求(期望立即响应requesttimeout)时,请求等待20-30秒,
如果第一个请求仍然没有完成,它会给出requesttimeout(如预期的那样) 如果第二个请求完成,第二个请求也会执行,我希望第二个请求在我发送后立即获得请求超时。
是否存在某种请求队列,如果是这样,当只有2个请求发送到应用程序时,为什么第二个请求会排队。
编辑:似乎您将第二个请求发送到完全相同的网址以进行操作 这需要超过20秒。第一个请求开始执行 立即但第二次请求正好等待20秒,而不是开始 执行。看起来有某种资源池