Ich begann Aufgabe mit Listen und warten Task.WhenAllC# Abbrechen Aufgabe mit gestarteter List <>
private async void btn_download_Click(object sender, EventArgs e)
{
.
.
.
await DownloadMultipleFilesAsync(old_json);
Console.WriteLine("Download completed.");
}
und das ist mein Code, die Aufgabe mit der Liste zu starten.
private async Task DownloadMultipleFilesAsync(List<media> doclist)
{
var token = cancelTokenSource.Token;
await Task.WhenAll(doclist.Select(doc => DownloadFileAsync(doc)));
btn_download.Enabled = true;
}
und meine Download-Methode
private async Task DownloadFileAsync(media media)
{
.
.
.
Console.WriteLine(media.no + media_ext + " started.");
webClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
await webClient.DownloadFileTaskAsync(new Uri(media.url), @downloadToDirectory);
Console.WriteLine(media.no + media_ext + " finished.");
.
.
.
}
Das Ausgabefenster wie folgt aus:
1.jpg started.
2.jpg started.
3.jpg started.
4.jpg started.
5.jpg started.
6.jpg started.
7.jpg started.
8.jpg started.
9.jpg started.
10.jpg started.
11.jpg started.
12.jpg started.
13.jpg started.
14.jpg started.
15.jpg started.
16.jpg started.
17.jpg started.
18.jpg started.
19.jpg started.
1.jpg finished.
4.jpg finished.
2.jpg finished.
6.jpg finished.
8.jpg finished.
10.jpg finished.
3.jpg finished.
5.jpg finished.
12.jpg finished.
14.jpg finished.
7.jpg finished.
16.jpg finished.
18.jpg finished.
9.jpg finished.
11.jpg finished.
13.jpg finished.
15.jpg finished.
17.jpg finished.
19.jpg finished.
Download completed.
I btn_cancel klicken möchten und Abbrechen Aufgabe und Aufgabe Ziel gestartet warten zu starten.
private void btn_cancel_Click(object sender, EventArgs e)
{
cancelTokenSource.Cancel();
cancelTokenSource = new CancellationTokenSource();
}
Und was ist Ihre Frage? –
Verwenden Sie 'Task.WaitAll (doclist.Select (doc => DownloadFileAsync (doc)). ToArray(), Token)' –
@MatiasCicero kann ich nicht so verwenden http://prntscr.com/c9iiql –