Asynchroniczne (Visual Basic)
Async Modyfikator wskazuje, że metoda lub Wyrażenie lambda on modyfikuje jest asynchroniczna.Metody te są określane jako metody komunikacji asynchronicznej.
Metoda async zapewnia wygodny sposób do potencjalnie długotrwałe pracy bez blokowania wątku wywołującego.Obiekt wywołujący metodę komunikacji asynchronicznej można wznowić swojej pracy, bez oczekiwania na metody asynchronicznej do końca.
[!UWAGA]
Async i Await słowa kluczowe zostały wprowadzone w Visual Studio 2012.Aby uzyskać informacje na temat innych nowych funkcji w tej wersji, zobacz Nowości w Visual Studio 2012.
Wprowadzenie do programowania asynchronicznych, zobacz Asynchroniczne programowania przy użyciu asynchronicznej i poczekać (C# i Visual Basic).
Poniższy przykład pokazuje strukturę metodę komunikacji asynchronicznej.Umownie nazwy metoda async kończą się na "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
Zazwyczaj metody zmodyfikowany przez Async słowo kluczowe zawiera co najmniej jeden oczekiwać wyrażenia lub instrukcji.Metoda jest uruchamiana synchronicznie aż do napotkania pierwszego Await, w którym momencie wstrzymuje, aż oczekiwany zadanie zostanie ukończone.W międzyczasie sterowanie jest zwracane do obiektu wywołującego metodę.Jeśli metoda nie zawiera Await wyrażenie lub instrukcja, metoda nie jest zawieszona i wykonuje, podobnie jak metoda synchronicznego.Ostrzeżenia kompilatora powiadamia użytkownika, aby wszelkie metody komunikacji asynchronicznej, które nie zawierają Await , ponieważ taka sytuacja może wskazać błąd.Aby uzyskać więcej informacji, zobacz błąd kompilatora.
Async Słowem kluczowym jest bezwarunkowe słowa kluczowego.To słowo kluczowe, gdy modyfikuje metodą lub wyrażenie lambda.W innych kontekstach jest interpretowany jako identyfikator.
Zwracanych typów
Jest to metoda komunikacji asynchronicznej, albo Sub procedury, lub Funkcja procedurę, która ma typ zwracany z Task lub Task<TResult>.Metody nie można zadeklarować dowolną ByRef parametry.
Należy określić Task(Of TResult) dla typu zwracanych danych metody komunikacji asynchronicznej Jeśli zwrotu instrukcja metody zawiera operandu typu TResult.Możesz użyć Task Jeśli nie znaczące wartość jest zwracana, gdy metoda jest ukończona.Oznacza to, zwraca wywołanie metody Task, ale gdy Task jest zakończone, wszelkie Await oświadczenie, że oczekuje na Task nie daje wartość wyniku.
Podprocedury asynchroniczne są używane przede wszystkim do definiowania procedury obsługi zdarzeń gdzie Sub procedura jest wymagana.Wywołujący podprocedury asynchroniczne nie można czekać na to i nie może przechwytywać wyjątków, które metoda wygeneruje.
Aby uzyskać dodatkowe informacje i przykłady, zobacz Typy zwrotu Async (C# i Visual Basic).
Przykład
Następujące przykłady przedstawiają program obsługi zdarzeń asynchronicznych, wyrażenie lambda asynchroniczne i metody komunikacji asynchronicznej.Na przykład pełna, który używa tych elementów, zobacz Instruktaż: Dostęp do sieci Web za pomocą transmisji asynchronicznej i poczekać (C# i Visual Basic).Można pobrać kod instruktażu z Przykładów kodu autora.
' 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
Zobacz też
Zadania
Instruktaż: Dostęp do sieci Web za pomocą transmisji asynchronicznej i poczekać (C# i Visual Basic)
Informacje
Poczekać operatora (Visual Basic)
Koncepcje
Asynchroniczne programowania przy użyciu asynchronicznej i poczekać (C# i Visual Basic)