0

さまざまなアドレスから一連の文字列をダウンロードしていますが、できるだけ早くダウンロードする必要があります。したがって、10 個の DownloadStringAsync と 1 個の DownloadString を使用します。

単純化されたコードは次のようになります。

    ...
    foreach(...)
    {
        using (WebClient client = new WebClient())
        {
            if (asyncworkers < 10)
            {
                client.DownloadStringCompleted += Done;
                client.DownloadStringAsync(uri);
                asyncworkers++;
            }else{
                string data = client.DownloadString(uri);
                ProcessData(data);
            }
        }
    }
    ...


private void Done(...)
{
    ProcessData(e.Result);
    asyncworkers--;
}

問題は、時々完全e.Resultではないということです。DoneonlyDownloadStringまたはDownloadStringAsyncthen のいずれかを使用すると、ほとんどの場合、常に完了します。それは正常ですか、それが完全ではない場合、または書き方が間違っている場合は、再ダウンロードするだけですか? DownloadStringAsyncそして、それが間違っている場合、10のうちの1つが作業を終了するまで強制的に待機させるにはどうすればよいですか? ありがとう。

4

0 に答える 0