- 接続を使用するメソッドがあります(たとえば、ページをダウンロードするメソッド)。
- このメソッドを複数回実行する必要があります(たとえば、1000ページをダウンロードします)。
- 同期的かつ順次的な方法でそれを行うには長い時間がかかります。
- リソースが限られています(最大8スレッドおよび/または最大50の同時接続)
- 私はそれを加速するためにすべてのリソースを使用したいと思います。
- 並列化(PLINQ、Parallel Extensionsなど)で問題を解決できることは知っていますが、すでに試しましたが、リソースが不足しているため、このアプローチは失敗します。
- リソースを管理しながら、この種のタスクを並列化する車輪の再発明はしたくありません。誰かが以前にそれを実行し、このためのライブラリ/チュートリアルを提供した必要があります。
誰か助けてもらえますか?
非同期呼び出しと並列化を組み合わせてパフォーマンスを最大化すると、更新がさらに複雑になります。これは、Firefoxダウンローダーなどの複数のダウンローダーに実装されており、2つのダウンロードを同時に取得し、そのうちの1つが完了すると、次のファイルを取得します。実装は非常に簡単に思えるかもしれませんが、実装したとき、汎用(WebRequestとDbCommandに便利)にしたり、問題(タイムアウトなど)に対処したりするのに問題がありました。
バウンティハンターバウンティは、信頼性が高く無料の($$).NETライブラリをリンクする最初のライブラリに付与されます。このライブラリは、非同期タスクをHttpWebRequests.BegingetResponseおよびSqlCommand.BeginExecuteNonQueryとして並列化する簡単なC#の方法を提供します。並列化は、N個のタスクが完了するのを待ってから、次のN個を開始する必要はありませんが、最初のN個のタスクの1つが終了するとすぐに新しいタスクを開始する必要があります。メソッドは、タイムアウト処理を提供する必要がありました。