Compartilhar via


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çãoObservaçã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)

AsyncStateMachineAttribute

Conceitos

Programação com Async assíncrona e esperar (C# e Visual Basic)