我正在考虑在使用多个Web服务时限制http请求的一些建议/策略。如果请求同步发生,我觉得我可以这样做,但它们是异步的,并且我认为我应该尝试以一种我不会阻止的方式执行限制逻辑。
由于网络应用程序使用多个Web服务,因此对不同的请求会有不同的限制。我在想这样的事情,但不确定如何以无阻塞的方式进行:
请求方法:
public static Task<string> AsyncRequest(string url, enum webService)
{
using(LimitingClass limiter = new LimitingClass(webService))
{
//Perform async request
}
}
在LimitingClass中,它将具有检查给定webservice的最后一个请求的逻辑,如果它违反了限制,那么它将等待一定的时间。但同时,如果另一个请求进入另一个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));
}
我只想将其包装在一个用于检查限制的内容中,并且不会阻止其他请求。