Sdílet prostřednictvím


Asynchronní (Visual Basic)

Async Modifikátor označuje, že metoda nebo lambda výraz , upravuje je asynchronní.Tyto metody jsou označovány jako asynchronní metody.

Asynchronní metody poskytuje pohodlný způsob, jak provádět potenciálně dlouhotrvající operace bez blokuje volající vlákno.Volání asynchronní metody můžete pokračovat v jeho práci bez čekání na asynchronní metody na dokončení.

[!POZNÁMKA]

Async a Await klíčová slova, které byly zavedeny v aplikaci Visual Studio 2012.Chcete-li zobrazit informace o další nové funkce v této verzi naleznete v tématu Novinky v sadě Visual Studio 2012.

Úvod do programování asynchronní, viz Asynchronní asynchronní pro programování a očekávat (C# a Visual Basic).

Následující příklad ukazuje strukturu asynchronní metody.Úmluvou asynchronní metody názvy končící "Asynchronní."

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

Obvykle metoda změnil Async klíčové slovo obsahuje alespoň jednu Await výrazu nebo příkazu.Metoda pracuje synchronně, dokud nedosáhne první Await, v tomto okamžiku pozastaví až po dokončení úkolu awaited.Do té doby řízení se vrátí do volající metody.Pokud metoda neobsahuje Await výrazu nebo příkazu, metoda není v režimu spánku a provede stejně jako synchronní metody.Upozornění kompilátoru upozorní všechny asynchronní metody, které neobsahují Await protože tato situace může znamenat chybu.Další informace naleznete Chyba kompilátoru.

Async Klíčové slovo je nerezervované klíčové slovo.Je klíčové slovo, pokud upraví metoda nebo lambda výraz.V jiných kontextech je interpretován jako identifikátor.

Návratové typy

Asynchronní metody je buď Sub postupu, nebo funkce postupu, která má návratový typ Task nebo Task<TResult>.Metodu nelze deklarovat všechny ByRef parametry.

Zadáte Task(Of TResult) pro návratový typ metody async-li vrátit příkaz metody má operand typu TResult.Můžete použít Task je-li žádný smysluplný je vrácena po dokončení metody.Vrátí volání metody Task, ale při Task dokončení jakékoli Await prohlášení, že čeká Task nedává výslednou hodnotu.

Asynchronní podprogramy slouží především k definování obslužných rutin událostí kde Sub je nutný.Volající asynchronní podprogram nelze očekávat a nelze zachytit výjimky, které vyvolá metoda.

Další informace a příklady naleznete v tématu Typy vrácení asynchronní (C# a Visual Basic).

Příklad

Následující příklady ukazují asynchronní obslužnou rutinu, lambda výraz asynchronní a asynchronní metody.Kompletní příklad, který používá tyto prvky, naleznete v Názorný postup: Přístup K webu pomocí asynchronní a vyčkání (C# a Visual Basic).Můžete stáhnout návod kódu z Developer ukázky kódu.

' 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

Viz také

Úkoly

Názorný postup: Přístup K webu pomocí asynchronní a vyčkání (C# a Visual Basic)

Referenční dokumentace

Vyčkání operátor (Visual Basic)

AsyncStateMachineAttribute

Koncepty

Asynchronní asynchronní pro programování a očekávat (C# a Visual Basic)