Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете отменить асинхронную операцию через период времени, используя CancellationTokenSource.CancelAfter метод, если вы не хотите ожидать завершения операции. Этот метод планирует отмену связанных задач, которые не выполняются в течение периода времени, указанного выражением CancelAfter
.
В этом примере добавляется код, разработанный в разделе "Отмена асинхронной задачи" или "Список задач" (Visual Basic), чтобы скачать список веб-сайтов и отобразить длину содержимого каждого из них.
Замечание
Для выполнения примеров необходимо установить Visual Studio 2012 или более поздней версии и .NET Framework 4.5 или более поздней версии на компьютере.
Скачивание примера
Вы можете скачать полный проект Windows Presentation Foundation (WPF) из примера Async: настройки вашего приложения и затем выполните следующие действия.
Распакуйте скачанный файл и запустите Visual Studio.
В строке меню выберите "Файл", "Открыть", "Проект или решение".
В диалоговом окне "Открыть проект" откройте папку, содержащую пример кода, который вы распаковали, а затем откройте файл решения (.sln) для AsyncFineTuningVB.
В обозревателе решений откройте контекстное меню для проекта CancelAfterTime и выберите "Задать как проект запуска".
Выберите клавишу F5 для запуска проекта.
Выберите клавиши CTRL+F5, чтобы запустить проект без отладки.
Запустите программу несколько раз, чтобы убедиться, что выходные данные могут отображаться для всех веб-сайтов, нет веб-сайтов или некоторых веб-сайтов.
Если вы не хотите скачать проект, просмотрите файл MainWindow.xaml.vb в конце этого раздела.
Создание примера
Пример в этом разделе добавляется к проекту, который разработан в теме "Отмена асинхронной задачи или списка задач" (Visual Basic), для отмены списка задач. В примере используется тот же пользовательский интерфейс, хотя кнопка "Отмена " не используется явно.
Чтобы создать пример самостоятельно, следуйте пошаговым инструкциям в разделе "Скачивание примера", но выберите CancelAListOfTasks в качестве Основного проекта. Добавьте изменения из этой темы в тот проект.
Чтобы указать максимальное время, прежде чем задачи будут помечены как отмененные, как показано в следующем примере, добавьте вызов CancelAfter
в startButton_Click
. Добавление помечается звездочками.
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
Запустите программу несколько раз, чтобы убедиться, что выходные данные могут отображаться для всех веб-сайтов, нет веб-сайтов или некоторых веб-сайтов. Ниже приведен пример выходных данных:
Length of the downloaded string: 35990.
Length of the downloaded string: 407399.
Length of the downloaded string: 226091.
Downloads canceled.
Полный пример
Следующий код представляет собой полный текст файла MainWindow.xaml.vb для примера. Звездочки помечают элементы, добавленные в этот пример.
Обратите внимание, что необходимо добавить ссылку для System.Net.Http.
Проект можно скачать из примера Async: тонкая настройка вашего приложения.
' 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.
См. также
- Асинхронное программирование с использованием ключевых слов Async и Await (Visual Basic)
- Пошаговое руководство. Доступ к Интернету с помощью Async и Await (Visual Basic)
- Отмена асинхронной задачи или списка задач (Visual Basic)
- Fine-Tuning Ваше асинхронное приложение (Visual Basic)
- Пример асинхронной настройки приложения