Async (Visual Basic)
O modificador de Async indica que o método ou expressão lambda que altera são assíncrono.Esses métodos são chamados métodos de async.
Um método de async fornece uma maneira conveniente de fazer o trabalho potencialmente longo sem bloqueio do segmento chamador.O chamador de um método de async seu trabalho pode continuar sem esperar o método de async para concluir.
Observação |
---|
As palavras-chave de Async e de Await foram introduzidos no Visual Studio 2012.Para obter informações sobre outros recursos novos na versão, consulte Novidades no Visual Studio 2012 RC. Para obter uma introdução à programação de async, consulte Programação com Async assíncrona e esperar (C# e Visual Basic). |
O exemplo a seguir mostra a estrutura de um método de async.Por convenção, os nomes de métodos de async terminam em “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
Normalmente, um método modificado pela palavra-chave de Async contém pelo menos uma expressão ou instrução de Espere .O método executa sincronamente até que o primeiro Await, o ponto em que ele suspende até que a tarefa deve terminar.Entretanto, o controle é retornado para o chamador do método.Se o método não contém uma expressão ou instrução de Await , o método não está suspensa e não é executado como um método faz síncrona.Alertas de aviso do compilador a você alguns métodos de async que não contêm Await porque essa situação pode indicar um erro.Para obter mais informações, consulte erro do compilador.
A palavra-chave de Async é uma palavra-chave não reservadas.É uma palavra-chave quando altera um método ou uma expressão lambda.Em todos contextos outros, é interpretado como um identificador.
Tipos de retorno
Um método de async é um procedimento de Sub , ou um procedimento de Função que tenha um tipo de retorno de Task ou de Task<TResult>.O método não pode declarar nenhum parâmetro de ByRef .
Você especifica Task(Of TResult) para o tipo de retorno de um método de async se a declaração de método Retorno de um operando tem o tipo TResult.Você usa Task se nenhum valor significativo é retornado quando o método for concluído.Ou seja, uma chamada para o método retorna Task, mas quando Task terminar, nenhuma instrução de Await que aguardar Task não produz um valor de resultado.
As sub-rotinas de Async são usados principalmente para definir os manipuladores de eventos onde um procedimento de Sub é necessário.O chamador de uma sub-rotina de async não pode aguardar e não pode capturar exceções que o gera o método.
Para mais informações e exemplos, consulte Tipos de retorno de Async (C# e Visual Basic).
Exemplo
Os exemplos a seguir mostram um manipulador de eventos de async, uma expressão lambda de async, e um método de async.Para um exemplo completo que usa esses elementos, consulte Passo a passo: Acessando a Web usando Async e aguardar (C# e Visual Basic).Você pode baixar o código da explicação passo a passo de Exemplos de código do desenvolvedor.
' 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
Consulte também
Tarefas
Passo a passo: Acessando a Web usando Async e aguardar (C# e Visual Basic)
Referência
Aguardar o operador (Visual Basic)
Conceitos
Programação com Async assíncrona e esperar (C# e Visual Basic)