4

Atomフィードからデータを取得する必要があるプログラムがあります。私は2つのアプローチを試しましたが、どちらもうまくいきませんでした。

WebClientを使用して、必要なすべての投稿を同期的にダウンロードしましたが、数千あり、サービスが遅いため、何時間もかかります。

私は(初めて)async / await、新しいHttpClientとTask.WhenAllを試しました。残念ながら、その結果、何千ものリクエストがサービスにヒットし、サービスを停止します。

たとえば100個のリクエストを並行して実行するにはどうすればよいですか?

4

2 に答える 2

2

ParallelOptions.MaxDegreeOfParallelism で Parallel を使用できます

ParallelOptions.MaxDegreeOfParallelism プロパティ

または、コレクション サイズが制限された BlockingCollection

BlockingCollection の概要

BlockingCollection をお勧めします

于 2013-03-18T18:24:24.467 に答える
1

一度に多くのことを成し遂げることができるという解決策が既にあるようですね。その上に別のレイヤーを追加して、すべての投稿をループするだけで、一度に 100 個しか処理しないことをお勧めします。

DownloadAll(List ListofPosts) DownloadAll の内部では、おそらく最後にすべて待機する必要があります。

代わりに: 1 から ( ListofPosts Count / 100) までの for ループ DownloadAll(ListofPosts.Skip(xxx).Take(100));

明らかに実際のコードではありませんが、メイン関数をほとんど変更せずに 100 個のチャンクを実行できます。

于 2013-03-18T17:44:28.713 に答える