Async (Visual Basic)

Le modificateur d' Async indique que la méthode ou expression lambda qu'elle modifie est asynchrone.De telles méthodes sont appelés méthodes async.

Une méthode async offre un moyen pratique d'effectuer le travail non longue sans bloquer le thread de l'appelant.L'appel d'une méthode async peut continuer son travail sans attendre la méthode async se termine.

[!REMARQUE]

Les mots clés d' Async et d' Await ont été introduits dans Visual Studio 2012.Pour plus d'informations sur d'autres nouvelles fonctionnalités dans cette version, consultez Nouveautés de Visual Studio 2012.

Pour une introduction à l'async programmation, consultez l' Programmation asynchrone avec Async et Await (C# et Visual Basic).

L'exemple suivant illustre la structure d'une méthode async.Par convention, les noms de méthodes async se terminent par « 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

En général, une méthode modifiée par le mot clé d' Async contient au moins une expression ou une instruction d' Attendez .La méthode fonctionne de façon synchrone jusqu'à ce qu'il atteigne le premier Await, auquel le point il s'interrompt jusqu'à ce que la tâche se termine attendue.Dans le même temps, le contrôle est retourné à l'appelant de la méthode.Si la méthode ne contient pas une expression ou une instruction d' Await, la méthode n'est pas interrompue et n'exécute pas comme le fait une méthode synchrone.Un avertissement du compilateur vous signale à toutes les méthodes async qui ne contiennent pas Await car cette situation peut indiquer une erreur.Pour plus d'informations, consultez erreur du compilateur.

Le mot clé d' Async est un mot clé fr.Il s'agit d'un mot clé lorsqu'il modifie une méthode ou une expression lambda.Dans tous les autres contextes, il est interprète comme identificateur.

Types de retours

Une méthode async est une procédure d' Sub, ou une procédure d' Fonction dont le type de retour d' Task ou d' Task<TResult>.La méthode ne peut déclarer des paramètres d' ByRef .

Vous spécifiez Task(Of TResult) pour le type de retour d'une méthode async si l'instruction d' Retour de la méthode possède un opérande de type TResult.Vous utilisez Task si aucune valeur explicite n'est retourné lorsque la méthode est terminée.Autrement dit, un appel à la méthode retourne Task, mais lorsque Task est terminé, aucune instruction d' Await qui attend Task ne produit une valeur de résultat.

Les sous-routines Async sont principalement utilisées pour définir des gestionnaires d'événements dans laquelle une procédure d' Sub est requise.L'appel d'une sous-routine async ne peut pas l'attendre et ne peut pas intercepter des exceptions que la méthode lève une.

Pour plus d'informations et d'exemples, consultez Types de retour Async (C# et Visual Basic).

Exemple

Les exemples suivants montrent un gestionnaire d'événements async, une expression lambda async, et une méthode async.Pour obtenir un exemple complet qui utilise ces éléments, consultez Procédure pas à pas : accès au Web avec Async et Await (C# et Visual Basic).Vous pouvez télécharger le code de procédure pas - à - pas de Exemples de code de développement.

' 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

Voir aussi

Tâches

Procédure pas à pas : accès au Web avec Async et Await (C# et Visual Basic)

Référence

Await, opérateur (Visual Basic)

AsyncStateMachineAttribute

Concepts

Programmation asynchrone avec Async et Await (C# et Visual Basic)