我從網上下載了很多url,但我不知道什麼時候所有的url已經完成下載。同時我寫了一些東西,但它看起來太垃圾了,儘管它很有用。如何知道什麼時候異步func已經完成c#
在我的代碼中,我從dtPP
dataTable下載了所有的url並將它們保存到matUrlFharsing
數組中。
這裏是我的代碼:
main()
{
Parallel.For(0, dtPP.Rows.Count, i =>
{
string f = "";
WebClient client = new WebClient();
client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);
lock (dtPP.Rows[i])
{
f = dtPP.Rows[i]["pp_url"].ToString();
}
client.DownloadDataAsync(new Uri(f), i);
});
while (end)
{
}
DoSomething();
}
void client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
int h = (int)e.UserState;
page = (int)e.UserState;
myString = enc.GetString(e.Result);
lock (matUrlFharsing[h])
{
lock (dtPP.Rows[h])
{
//save in mat
matUrlFharsing[h] = Pharsing.CreateCorrectHtmlDoc(myString);
}
}
lock (myLocker)
{
ezer = false;
for (int j = 0; j < matUrlFharsing.Length && !ezer; j++)
{
if (matUrlFharsing[j] == "")
ezer = true;
}
end = ezer;
}
}
我能做些什麼來改善或改變呢?
與您的第一個答案有什麼主要區別? –
在我第一個答案我主張,你手動檢查是否所有的數據下載,然後發送信號到主線程。在這裏,我sugest使用AutoResetEvent進行每次下載,並在主線程等待來自所有這些信號 –
謝謝,什麼是最好的? –