我的南希请求在哪里等待?

时间:2015-01-26 19:24:22

标签: c# nancy

我试图避免使用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秒,而不是开始   执行。看起来有某种资源池

0 个答案:

没有答案