2

Webclient downloadfileasyncを介して〜380サイトからデータをサンプリングするac#アプリケーションを継承しました。サイトごとに個別のスレッドが作成されます!(ダウンロードはそれぞれタイムアウト期間待ってから次のデータをダウンロードします-したがって、負荷は一定ではありません....しかしそれでも!)とにかく、サイトの数は来年かそこらで(おそらく劇的に)増加するので、私は欲しいですこれを、サイトのサブセットに対して一連のWebclient downloadfileasync呼び出しを発行する少数の(妥当な数の)ワーカースレッドに変更します。しかし、複数のダウンロードが同時に完了するとどうなるかわかりません-downloadfilecompletedイベントハンドラーはwebclientによってシリアル化されますか?または、複数のWebクライアントの完了が「同時に」発生する可能性があります(または、より可能性が高いですが、インターリーブ)?ある完了によって別の完了が破損するリスクがありますか?または、現在の実装でスレッドの急増を管理する方法について、より良い提案がありますか?

前もって感謝します。

4

1 に答える 1

2

複数の完了イベントが同時に発生する可能性があると予想しますが、慎重に処理しない共有状態がない限り、問題ありません。結果が「壊れる」べきではありません - もしそうなら、それは間違いなく .NET のバグです。

非同期呼び出しを使用している場合、おそらくワーカー スレッドは必要ないことに注意してください。非同期処理を行う上で重要なことは、呼び出しを発行してからスレッドをブロックしないことです UIスレッド(または何でも)。

最先端のテクノロジを使用できる場合は、C# 5 / .NET 4.5 (リリース候補モード) の async/await 機能を使用すると、作業が大幅に楽になる可能性があります。

于 2012-06-18T18:49:43.940 に答える