Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz anulować operację asynchroniczną po upływie określonego czasu przy użyciu CancellationTokenSource.CancelAfter metody , jeśli nie chcesz czekać na zakończenie operacji. Ta metoda planuje anulowanie wszelkich skojarzonych zadań, które nie są ukończone w okresie czasu określonym przez CancelAfter wyrażenie.
W tym przykładzie dodamy kod opracowany w temacie Anuluj zadanie asynchroniczne lub listę zadań (Visual Basic), aby pobrać listę witryn internetowych i wyświetlić długość zawartości każdego z nich.
Uwaga / Notatka
Aby uruchomić przykłady, na komputerze musi być zainstalowany program Visual Studio 2012 lub nowszy oraz program .NET Framework 4.5 lub nowszy.
Pobieranie przykładu
Pełny projekt programu Windows Presentation Foundation (WPF) można pobrać z przykładu Async: Dostosowywanie aplikacji , a następnie wykonaj następujące kroki.
Zdekompresuj pobrany plik, a następnie uruchom program Visual Studio.
Na pasku menu wybierz pozycję Plik, Otwórz, Projekt/Rozwiązanie.
W oknie dialogowym Otwieranie projektu otwórz folder zawierający zdekompresowany przykładowy kod, a następnie otwórz plik rozwiązania (.sln) dla pliku AsyncFineTuningVB.
W Eksploratorze rozwiązań otwórz menu skrótów dla projektu CancelAfterTime , a następnie wybierz pozycję Ustaw jako projekt startowy.
Wybierz klucz F5, aby uruchomić projekt.
Wybierz Ctrl+F5, aby uruchomić projekt bez debugowania.
Uruchom program kilka razy, aby sprawdzić, czy dane wyjściowe mogą wyświetlać dane dla wszystkich witryn internetowych, żadnych witryn internetowych lub niektórych witryn internetowych.
Jeśli nie chcesz pobierać projektu, możesz przejrzeć plik MainWindow.xaml.vb na końcu tego tematu.
Budowanie przykładu
Przykład w tym temacie dodaje się do projektu opracowanego w Anulowanie zadania asynchronicznego lub listy zadań (Visual Basic), aby anulować listę zadań. W przykładzie użyto tego samego interfejsu użytkownika, chociaż przycisk Anuluj nie jest używany jawnie.
Aby utworzyć przykład samodzielnie, postępuj zgodnie z instrukcjami w sekcji "Pobieranie przykładu", ale wybierz pozycję CancelAListOfTasks jako projekt startowy. Dodaj zmiany w tym temacie do tego projektu.
Aby określić maksymalny czas przed oznaczeniem zadań jako anulowanych, dodaj wywołanie do CancelAfter, startButton_Click, jak pokazano w poniższym przykładzie. Dodanie jest oznaczone gwiazdkami.
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
Uruchom program kilka razy, aby sprawdzić, czy dane wyjściowe mogą wyświetlać dane dla wszystkich witryn internetowych, żadnych witryn internetowych lub niektórych witryn internetowych. Następujące dane wyjściowe to przykład:
Length of the downloaded string: 35990.
Length of the downloaded string: 407399.
Length of the downloaded string: 226091.
Downloads canceled.
Kompletny przykład
Poniższy kod jest kompletnym tekstem pliku MainWindow.xaml.vb dla przykładu. Gwiazdki oznaczają elementy, które zostały dodane w tym przykładzie.
Zwróć uwagę, że należy dodać odwołanie dla elementu System.Net.Http.
Projekt można pobrać z Asynchroniczny Przykład: Dostrajanie Twojej Aplikacji.
' 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.
Zobacz także
- Programowanie asynchroniczne z funkcją Async i Await (Visual Basic)
- Przewodnik: uzyskiwanie dostępu do sieci Web przy użyciu Async i Await (Visual Basic)
- Anulowanie zadania asynchronicznego lub listy zadań (Visual Basic)
- Fine-Tuning Twoja aplikacja asynchroniczna (Visual Basic)
- Przykład asynchroniczny: dostrajanie aplikacji