サードパーティのサーバーから情報を取得するためにサードパーティのサーバーを要求する必要がある .NET4 ベースのアプリケーションを開発しています。これらの HTTP リクエストを行うために HttpClient を使用しています。
短期間に 100 から 1000 のリクエストを作成する必要があります。これらのリクエストの作成を制限(定数などで定義)に制限して、他のサーバーが多くのリクエストを受信しないようにしたいと思います。
いつでも作成されるタスクの量を減らす方法を示すこのリンクを確認しました。
これが私の非機能的なアプローチです:
// create the factory
var factory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(level));
// use the factory to create a new task that will create the request to the third-party server
var task = factory.StartNew(() => {
return new HttpClient().GetAsync(url);
}).Unwrap();
もちろん、ここでの問題は、一度に 1 つのタスクが作成されたとしても、別のスケジューラで実行されるため、同時に多くの要求が作成されて処理されることです。スケジューラを HttpClient に変更する方法が見つかりませんでした。
この状況をどのように処理すればよいですか? 作成されるリクエストの量を特定の制限に制限したいのですが、これらのリクエストが完了するまでブロックしないでください。
これは可能ですか?何か案は?