私は、非同期タスクを少し新しくしました。C#多くの非同期タスクを同時に実行する
私は学生IDを取得し、特定の大学のウェブサイトから必要なIDでデータをスクラップする機能を持っています。
private static HttpClient client = new HttpClient();
public static async Task<Student> ParseAsync(string departmentLink, int id, CancellationToken ct)
{
string website = string.Format(departmentLink, id);
try
{
string data;
var stream = await client.GetAsync(website, ct);
using (var reader = new StreamReader(await stream.Content.ReadAsStreamAsync(), Encoding.GetEncoding("windows-1256")))
data = reader.ReadToEnd();
//Parse data here and return Student.
} catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
正常に動作します。私は多くの学生のために、この機能を実行する必要があるのに時々私は、私は後でそれらを待つために、アレイ内のタスクを格納してい
for(int i = ids.first; i <= ids.last; i++)
{
tasks[i - ids.first] = ParseStudentData.ParseAsync(entity.Link, i, cts.Token).ContinueWith(t =>
{
Dispatcher.Invoke(() =>
{
listview_students.Items.Add(t.Result);
//Students.Add(t.Result);
//lbl_count.Content = $"{listview_students.Items.Count}/{testerino.Length}";
});
});
}
次を使用します。
これは、生徒数が(0、〜600?)の間であれば、細かいこともあります。 そしてまだ解析されていない他のすべての学生はを投げます。タスクはキャンセルされました。
私は決してキャンセルトークンを使用しないことに注意してください。
非常に多くの学生にこの機能を実行する必要があります。これは〜9000の非同期タスクに完全に到達することができます。何が起こっているのですか?