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 に答える