どのようにしてC#を使用して複数のWebサービスを同時に呼び出すことができますか?C# - 同時にWebサービスを呼び出し、スロットルで非同期にする
私は顧客のテーブルを持っています(約100万人)、私は5,000人の顧客のバッチを持つWebサービスに電話して情報を返し、ファイルに書き込む必要があります。
私はasync/awaitとTPL Dataflowライブラリを使用しようとしましたが、コードは普通の古い同期メソッドを使用するよりも非常に遅いです。以下は私が達成しようとしていることの要約です。コードは、非同期とマークすることができないコンソールアプリケーション(メインメソッド)から実行されます。
public void GenerateCustomerFile(){
var outputFileName = "MyCustomerFile.txt";
var customers = CustomerRepo.GetCustomers();
var customerBatch = new List<Customer>();
foreach(var customer in customers){
customerBatch.Add(customer);
if(customerBatch.Count >= 20000){
// Call web service concurrently (4 threads with 5000 customers each)
// Write results to file
customerBatch.Clear();
}
}
}
これを試してみます。メインのメソッドからこの非同期コードを呼び出すのはどうですか?デッドロックを起こさずにどうしていますか? – user2966445
この場合、実際にタスク数をどのように制限していますか? 100万のレコードがある場合、これは200の並行タスクを開始しませんか? – user2966445
いいえ、それは、タスクの処理方法を最適化すべきではありません。これがあなたの主な方法にある場合、非同期メソッドタスクを作成し、それを待つことをお勧めします – konkked