1

在使用多个 Web 服务时,我正在寻求一些关于限制 http 请求的建议/策略。我觉得如果请求是同步发生的,我可以这样做,但它们是异步的,我认为我应该尝试以一种我不会阻塞的方式执行限制逻辑。

由于 Web 应用程序使用多个 Web 服务,因此对于不同的请求会有不同的限制。我在想这样的事情,但不确定如何以无阻塞的方式进行:

请求方法:

public static Task<string> AsyncRequest(string url, enum webService)
{
    using(LimitingClass limiter = new LimitingClass(webService))
    {
       //Perform async request
    }
}        

在 LimitingClass 中,它将具有检查给定 Web 服务的最后一个请求的逻辑,如果它违反了限制,那么它将等待一定的时间。但与此同时,如果另一个请求进入不同的 Web 服务,那么我不希望在 LimitingClass 等待时阻止该请求。上述方法有什么根本错误吗?我应该为每个 LimitingClass 实例打开一个新线程吗?

如果可能的话,一些伪代码会很棒。

非常感谢

更新:

这是我当前请求方法的简化版本:

public static Task<string> MakeAsyncRequest(string url, string contentType)
{
    HttpWebRequest request = //set up my request

    Task<WebResponse> task = Task.Factory.FromAsync(
        request.BeginGetResponse,
        asyncResult => request.EndGetResponse(asyncResult),
        (object)null);

    return task.ContinueWith(t => ReadCallback(t.Result));
}

我只想将它包装在一个使用中以检查限制并且不会阻止其他请求。

4

1 回答 1

1

那么,您如何在不阻塞的情况下限制对资源的访问呢?

我认为您需要查看信号量-它们允许限制可以同时访问资源或资源池的线程数。

于 2012-05-18T15:33:19.923 回答