Async (Visual Basic)
Модификатор Async указывает, что метод лямбда-выражение, или изменяет асинхронными.Эти методы называются Методы async.
Метод токена предоставляет удобный способ работы задачи потенциально долго без блокировки потока вызывающего объекта.Вызывающая сторона метода токена может возобновить свою работу, не дожидаясь метод токена для выполнения.
Примечание |
---|
Ключевые слова Async и Await были введены в Visual Studio 2012.Сведения о других новых функциях в этой версии см. в разделе Новые возможности Visual Studio 2012, версия-кандидат. Введение в токен программировании см. в разделе Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic). |
В следующем примере показана структура метода токена.В соответствии с соглашением имена методов токена заканчиваются словом "Async".
Public Async Function ExampleMethodAsync() As Task(Of Integer)
' . . .
' At the Await expression, execution in this method is suspended and,
' if AwaitedProcessAsync has not already finished, control returns
' to the caller of ExampleMethodAsync. When the awaited task is
' completed, this method resumes execution.
Dim exampleInt As Integer = Await AwaitedProcessAsync()
' . . .
' The return statement completes the task. Any method that is
' awaiting ExampleMethodAsync can now get the integer result.
Return exampleInt
End Function
Обычно метод измененный ключевым словом Async содержит по крайней мере одно выражение или оператора Рекомендуется.Метод выполняется одновременно до тех пор, пока не будет достигнут первое значение Await, в котором он точка приостанавливается до тех пор, пока ожидается задача не будет завершено.В то же время, элемент управления возвращается вызывающему объекту метода.Если метод не содержит выражение или оператора Await, не приостановлен и не выполняет метод как синхронного метода.Предупреждение компилятора предупреждает требуется для всех методов токена, не содержащих Await, поскольку в этой ситуации может отображать ошибку.Дополнительные сведения см. в разделе ошибка компилятора.
Ключевое слово Async безоговорочное ключевое слово.Ключевое слово, когда изменяется метод или лямбда-выражение.Во всех других контекстах, оно интерпретируется как идентификатор.
Возвращаемые типы
Метод токена или процедуры Sub, или процедуры Функция, имеет возвращаемый тип Task или Task<TResult>.Метод не может объявить все параметры ByRef.
Указать Task(Of TResult) для возвращаемого типа метода токена, если выписка Return метода имеет операнд типа TResult.Класс Task используется при отсутствии информативное значение не возвращается, когда метод завершения.То есть вызов метода Task возвращает Task, но при завершении любая выписка Await ожидает, Task не предоставляет значение.
Подпрограммы Async используются в основном для определения обработчики событий, процедура Sub не требуется.Вызывающий объект подпрограммы токена не может ожидать его и не может перехватывать исключения, метод создает исключение.
Дополнительные сведения и примеры см. в разделе Асинхронные типы возвращаемых значений (C# и Visual Basic).
Пример
В следующих примерах демонстрируется обработчик событий токена, лямбда-выражение токена и метод токена.Полный пример использования этих элементов см. в разделе Пошаговое руководство. Получение доступа к Интернету с помощью модификатора Async и оператора Await (C# и Visual Basic).Можно загрузить из Примеры кода разработчика кода пошагового руководства.
' An event handler must be a Sub procedure.
Async Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click
textBox1.Clear()
' SumPageSizesAsync is a method that returns a Task.
Await SumPageSizesAsync()
textBox1.Text = vbCrLf & "Control returned to button1_Click."
End Sub
' The following async lambda expression creates an equivalent anonymous
' event handler.
AddHandler button1.Click, Async Sub(sender, e)
textBox1.Clear()
' SumPageSizesAsync is a method that returns a Task.
Await SumPageSizesAsync()
textBox1.Text = vbCrLf & "Control returned to button1_Click."
End Sub
' The following async method returns a Task(Of T).
' A typical call awaits the Byte array result:
' Dim result As Byte() = Await GetURLContents("https://msdn.com")
Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())
' The downloaded resource ends up in the variable named content.
Dim content = New MemoryStream()
' Initialize an HttpWebRequest for the current URL.
Dim webReq = CType(WebRequest.Create(url), HttpWebRequest)
' Send the request to the Internet resource and wait for
' the response.
Using response As WebResponse = Await webReq.GetResponseAsync()
' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = response.GetResponseStream()
' Read the bytes in responseStream and copy them to content.
' CopyToAsync returns a Task, not a Task<T>.
Await responseStream.CopyToAsync(content)
End Using
End Using
' Return the result as a byte array.
Return content.ToArray()
End Function
См. также
Задачи
Ссылки
Основные понятия
Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic)