Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le Async
modificateur indique que la méthode ou l’expression lambda qu’elle modifie est asynchrone. Ces méthodes sont appelées méthodes asynchrones.
Une méthode asynchrone offre un moyen pratique d’effectuer un travail potentiellement long sans bloquer le thread de l’appelant. L’appelant d’une méthode asynchrone peut reprendre son travail sans attendre que la méthode asynchrone se termine.
Remarque
Les mots clés Async
et Await
ont été introduits dans Visual Studio 2012. Pour une présentation de la programmation asynchrone, consultez Programmation asynchrone avec Async et Await.
L’exemple suivant montre la structure d’une méthode asynchrone. Par convention, les noms de méthodes asynchrones 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 règle générale, une méthode modifiée par le Async
mot clé contient au moins une expression ou une instruction Await . La méthode s’exécute de manière synchrone jusqu’à ce qu’elle atteigne le premier Await
, à quel moment elle s’interrompt jusqu’à ce que la tâche attendue se termine. En attendant, le contrôle est retourné à l’appelant de la méthode. Si la méthode ne contient pas d’expression ou d’instruction Await
, la méthode n’est pas suspendue et s’exécute comme méthode synchrone. Un avertissement du compilateur vous avertit de toutes les méthodes asynchrones qui ne contiennent Await
pas, car cette situation peut indiquer une erreur. Pour plus d’informations, consultez l’erreur du compilateur.
Le Async
mot clé est un mot clé non réservé. 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été comme un identificateur.
Types de retour
Une méthode asynchrone est une procédure Sub ou une procédure Function qui a un type de retour ou TaskTask<TResult>. La méthode ne peut pas déclarer de paramètres ByRef .
Vous spécifiez Task(Of TResult)
pour le type de retour d’une méthode asynchrone si l’instruction Return de la méthode a un opérande de type TResult. Utilisez Task
si aucune valeur significative n'est retournée lorsque la méthode est terminée. Autrement dit, un appel à la méthode retourne un Task
, mais lorsque l’instruction Task
est terminée, toute Await
instruction qui attend Task
le ne produit pas de valeur de résultat.
Les sous-routines asynchrones sont utilisées principalement pour définir des gestionnaires d’événements où une Sub
procédure est requise. L’appelant d’une sous-routine asynchrone ne peut pas l’attendre et ne peut pas intercepter les exceptions levées par la méthode.
Pour obtenir plus d’informations et des exemples, consultez Types de retour Async.
Exemple :
Les exemples suivants montrent un gestionnaire d’événements asynchrone, une expression lambda asynchrone et une méthode asynchrone. Pour obtenir un exemple complet qui utilise ces éléments, consultez Procédure pas à pas : accès au web à l’aide d’Async et Await. Vous pouvez télécharger l’exemple à partir de l’exemple de navigateur .NET. L’exemple de code se trouve dans le projet SerialAsyncExample .
' 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