Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können einen asynchronen Vorgang nach einem bestimmten Zeitraum abbrechen, indem Sie die CancellationTokenSource.CancelAfter Methode verwenden, wenn Sie nicht warten möchten, bis der Vorgang abgeschlossen ist. Diese Methode plant den Abbruch aller zugeordneten Vorgänge, die nicht innerhalb des Zeitraums abgeschlossen sind, der durch den CancelAfter
Ausdruck festgelegt wird.
In diesem Beispiel wird der Code erweitert, der in Cancel an Async Task or a List of Tasks (Visual Basic) entwickelt wurde, um eine Liste von Websites herunterzuladen und die Länge der Inhalte jeder einzelnen anzuzeigen.
Hinweis
Um die Beispiele auszuführen, müssen Sie Visual Studio 2012 oder höher und .NET Framework 4.5 oder höher auf Ihrem Computer installiert haben.
Herunterladen des Beispiels
Sie können das vollständige Windows Presentation Foundation (WPF)-Projekt aus dem Async-Beispiel herunterladen: Optimieren Sie Ihre Anwendung , und führen Sie dann die folgenden Schritte aus.
Dekomprimieren Sie die heruntergeladene Datei, und starten Sie Dann Visual Studio.
Wählen Sie auf der Menüleiste "Datei", "Öffnen", "Projekt/Projektmappe" aus.
Öffnen Sie im Dialogfeld "Projekt öffnen" den Ordner mit dem Beispielcode, den Sie dekomprimiert haben, und öffnen Sie dann die Lösungsdatei (.sln) für AsyncFineTuningVB.
Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das CancelAfterTime-Projekt und wählen dann Als Startprojekt festlegen aus.
Wählen Sie die F5-TASTE aus, um das Projekt auszuführen.
Wählen Sie die STRG+F5-Tasten aus, um das Projekt auszuführen, ohne es zu debuggen.
Führen Sie das Programm mehrmals aus, und überprüfen Sie dabei, ob die Ausgabe für alle, keine oder einige Websites angezeigt wird.
Wenn Sie das Projekt nicht herunterladen möchten, können Sie die MainWindow.xaml.vb Datei am Ende dieses Themas überprüfen.
Erstellen des Beispiels
Das Beispiel in diesem Thema baut auf dem Projekt auf, das unter Eine asynchrone Aufgabe oder Aufgabenliste abbrechen (Visual Basic) entwickelt wurde, um eine Aufgabenliste abzubrechen. Im Beispiel wird dieselbe Benutzeroberfläche verwendet, obwohl die Schaltfläche "Abbrechen " nicht explizit verwendet wird.
Um das Beispiel selbst zu erstellen, befolgen Sie schritt für Schritt die Anweisungen im Abschnitt "Herunterladen des Beispiels", wählen Sie aber CancelAListOfTasks als StartUp-Projekt aus. Fügen Sie die Änderungen in diesem Thema zu diesem Projekt hinzu.
Um eine maximale Zeit anzugeben, bevor die Vorgänge als abgebrochen markiert werden, fügen Sie einen Aufruf an CancelAfter
startButton_Click
, wie im folgenden Beispiel gezeigt. Das Hinzufügen ist mit Sternchen gekennzeichnet.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs)
' Instantiate the CancellationTokenSource.
cts = New CancellationTokenSource()
resultsTextBox.Clear()
Try
' ***Set up the CancellationTokenSource to cancel after 2.5 seconds. (You
' can adjust the time.)
cts.CancelAfter(2500)
Await AccessTheWebAsync(cts.Token)
resultsTextBox.Text &= vbCrLf & "Downloads complete."
Catch ex As OperationCanceledException
resultsTextBox.Text &= vbCrLf & "Downloads canceled." & vbCrLf
Catch ex As Exception
resultsTextBox.Text &= vbCrLf & "Downloads failed." & vbCrLf
End Try
' Set the CancellationTokenSource to Nothing when the download is complete.
cts = Nothing
End Sub
Führen Sie das Programm mehrmals aus, und überprüfen Sie dabei, ob die Ausgabe für alle, keine oder einige Websites angezeigt wird. Die folgende Ausgabe ist beispielhaft:
Length of the downloaded string: 35990.
Length of the downloaded string: 407399.
Length of the downloaded string: 226091.
Downloads canceled.
Vollständiges Beispiel
Der folgende Code ist der vollständige Text der MainWindow.xaml.vb-Datei für das Beispiel. Sternchen markieren die Elemente, die für dieses Beispiel hinzugefügt wurden.
Beachten Sie, dass Sie einen Verweis für System.Net.Http hinzufügen müssen.
Sie können das Projekt aus dem Async-Beispiel herunterladen: Optimieren Sie Ihre Anwendung.
' Add an Imports directive and a reference for System.Net.Http.
Imports System.Net.Http
' Add the following Imports directive for System.Threading.
Imports System.Threading
Class MainWindow
' Declare a System.Threading.CancellationTokenSource.
Dim cts As CancellationTokenSource
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs)
' Instantiate the CancellationTokenSource.
cts = New CancellationTokenSource()
resultsTextBox.Clear()
Try
' ***Set up the CancellationTokenSource to cancel after 2.5 seconds. (You
' can adjust the time.)
cts.CancelAfter(2500)
Await AccessTheWebAsync(cts.Token)
resultsTextBox.Text &= vbCrLf & "Downloads complete."
Catch ex As OperationCanceledException
resultsTextBox.Text &= vbCrLf & "Downloads canceled." & vbCrLf
Catch ex As Exception
resultsTextBox.Text &= vbCrLf & "Downloads failed." & vbCrLf
End Try
' Set the CancellationTokenSource to Nothing when the download is complete.
cts = Nothing
End Sub
' You can still include a Cancel button if you want to.
Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
If cts IsNot Nothing Then
cts.Cancel()
End If
End Sub
' Provide a parameter for the CancellationToken.
' Change the return type to Task because the method has no return statement.
Async Function AccessTheWebAsync(ct As CancellationToken) As Task
Dim client As HttpClient = New HttpClient()
' Call SetUpURLList to make a list of web addresses.
Dim urlList As List(Of String) = SetUpURLList()
' Process each element in the list of web addresses.
For Each url In urlList
' GetAsync returns a Task(Of HttpResponseMessage).
' Argument ct carries the message if the Cancel button is chosen.
' Note that the Cancel button can cancel all remaining downloads.
Dim response As HttpResponseMessage = Await client.GetAsync(url, ct)
' Retrieve the website contents from the HttpResponseMessage.
Dim urlContents As Byte() = Await response.Content.ReadAsByteArrayAsync()
resultsTextBox.Text &=
vbCrLf & $"Length of the downloaded string: {urlContents.Length}." & vbCrLf
Next
End Function
' Add a method that creates a list of web addresses.
Private Function SetUpURLList() As List(Of String)
Dim urls = New List(Of String) From
{
"https://msdn.microsoft.com",
"https://msdn.microsoft.com/library/hh290138.aspx",
"https://msdn.microsoft.com/library/hh290140.aspx",
"https://msdn.microsoft.com/library/dd470362.aspx",
"https://msdn.microsoft.com/library/aa578028.aspx",
"https://msdn.microsoft.com/library/ms404677.aspx",
"https://msdn.microsoft.com/library/ff730837.aspx"
}
Return urls
End Function
End Class
' Sample output:
' Length of the downloaded string: 35990.
' Length of the downloaded string: 407399.
' Length of the downloaded string: 226091.
' Downloads canceled.
Siehe auch
- Asynchrone Programmierung mit „Async“ und „Await“ (Visual Basic)
- Exemplarische Vorgehensweise: Zugreifen auf das Web mithilfe von Async und Await (Visual Basic)
- Abbrechen einer asynchronen Aufgabe oder einer Aufgabenliste (Visual Basic)
- Fine-Tuning Ihrer asynchronen Anwendung (Visual Basic)
- Asynchrones Beispiel: Optimieren Ihrer Anwendung