Share via


Async (Visual Basic)

Der Async-Modifizierer gibt an, dass die - Methode oder Lambda-Ausdruck, das sie ändert, asynchron ist.Solche Methoden wird als asynchrone Methoden.

Eine asynchrone Methode bietet eine einfache Möglichkeit, möglicherweise Aufgaben ausführt mit langer Laufzeit, ohne den Thread des Aufrufers zu blockieren.Der Aufrufer einer asynchronen Methode kann seine Arbeit fortsetzen, ohne auf die asynchrone Methode zu warten, bis zu beenden.

HinweisHinweis

Die Async und Await Schlüsselwörter wurden in Visual Studio 2012 eingeführt.Informationen zu anderen neue Funktionen in dieser Version, finden Sie unter Neues in Visual Studio 2012.

Eine Einführung in die asynchrone Programmierung, finden Sie unter Asynchrone Programmierung mit Async und Await (C# und Visual Basic).

Im folgenden Beispiel wird die Struktur einer asynchronen Methode an.Gemäß der Konvention beenden asynchrone Methodennamen in "erreichen."

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

In der Regel enthält eine Methode, die vom Async-Schlüsselwort geändert wird, mindestens einen Rechnen Sie Ausdruck oder -Anweisung.Die - Methode wird synchron ausgeführt, bis der erste Await erreicht, an denen Punkt werden, bis die erwartete Aufgabe ausführt.Mittlerweile wird Steuerelement zum Aufrufer der - Methode zurückgegeben.Wenn die Methode keinen Await Ausdruck oder -Anweisung enthält, wird die - Methode nicht angehalten und ausgeführt wird, wie eine synchrone Methode ist.Eine Compilerwarnung werden Sie auf alle asynchronen Methoden, die nicht Await enthalten, da diese Situation möglicherweise ein Fehler angegeben hat.Weitere Informationen finden Sie unter Compilerfehler.

Das Async-Schlüsselwort ist ein vorbehaltloses Schlüsselwort.Es ist ein Schlüsselwort, wenn eine Methode oder einen Lambda-Ausdruck ändert.In allen anderen Kontexten wird er als Bezeichner interpretiert.

Rückgabetypen

Eine asynchrone Methode ist entweder eine Sub Prozedur oder eine Funktion Prozedur, die einen Rückgabetyp Task oder Task<TResult> verfügt.Die - Methode kann keine als ByRef-Parameter-Parameter deklarieren.

Sie geben Task(Of TResult) für den Rückgabetyp einer asynchronen Methode an, wenn die Return-Anweisung der Methode einen Operanden vom Typ TResult verfügt.Sie verwenden Task, wenn kein sinnvoller Wert zurückgegeben wird, wenn die Methode abgeschlossen ist.Das bedeutet, dass ein Aufruf der - Methode Task zurück, aber, wenn Task abgeschlossen ist, erzeugt keine Await-Anweisung, die Task erwartet, keinen Ergebniswert.

Asynchrone Unterroutinen werden hauptsächlich verwendet, um Ereignishandler zu definieren, in denen eine Sub Prozedur erforderlich ist.Der Aufrufer einer asynchronen Unterroutine kann sie nicht erwarten und kann Ausnahmen auffangen, die die - Methode auslöst.

Weitere Informationen und Beispiele finden Sie unter Asynchrone Rückgabetypen (C# und Visual Basic).

Beispiel

Die folgenden Beispiele zeigen einen asynchronen Ereignishandler, einen asynchronen Lambda-Ausdruck und eine asynchrone Methode an.Ein vollständiges Beispiel, das diese Elemente verwendet, finden Sie unter Exemplarische Vorgehensweise: Zugreifen auf das Web mit Async und Await (C# und Visual Basic).Sie können den Code der exemplarischen Vorgehensweise von Entwickler-Codebeispiele herunterladen.

' 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

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Zugreifen auf das Web mit Async und Await (C# und Visual Basic)

Referenz

Await-Operator (Visual Basic)

AsyncStateMachineAttribute

Konzepte

Asynchrone Programmierung mit Async und Await (C# und Visual Basic)