Aracılığıyla paylaş


Zaman uyumsuz (Visual Basic)

Async Değiştirici gösterir yöntemi veya lambda ifadesi zaman uyumsuz olarak onu değiştirir.Bu tür yöntemler için olarak adlandırılır zaman uyumsuz yöntemleri.

Zaman uyumsuz yöntemini çağıranın iş parçacığı engelleme olmadan uzun sürme iş yapmak için kullanışlı bir yol sağlar.Zaman uyumsuz yöntemini çağıran kendi iş zaman uyumsuz yöntem bitmesini beklemeden devam edebilirsiniz.

[!NOT]

Async Ve Await anahtar sözcükler Visual Studio 2012 tanıtılan.Bu sürümdeki diğer yeni özellikler hakkında daha fazla bilgi için bkz: Visual Studio 2012'daki Yenilikler.

Zaman uyumsuz programlama giriş için bkz: Zaman uyumsuz zaman uyumsuz programlama ve beklemek (C# ve Visual Basic).

Aşağıdaki örnek, bir zaman uyumsuz yöntem yapısını gösterir.Kuralı olarak, zaman uyumsuz yöntem adları sona erdirmek "Zaman uyumsuz."

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

Genellikle, bir yöntem olarak değiştiren tarafından Async anahtar sözcük içeren en az bir Await ifade ve deyimin.İlk ulaşana kadar yöntemini zaman uyumlu olarak çalışır Await, awaited görev tamamlanıncaya kadar bu noktada, bekletir.Bu arada, denetim yöntemini çağırana döndürülür.Yöntem içermiyorsa, bir Await yöntemi ifade ve deyimin, askıya değildir ve zaman uyumlu bir yöntem olarak yürütür.Derleyici uyarı içermeyen herhangi bir zaman uyumsuz yöntemleri sizi uyarır Await çünkü bu durum gösteren bir hata olabilir.Daha fazla bilgi için bkz: derleyici hatası.

Async Ayrılmamış bir anahtar sözcüktür.Bir yöntem veya lambda ifadesi değiştirdiğinde bir anahtar sözcüktür.Diğer bağlamlarda, tanımlayıcı olarak yorumlanır.

Dönüş türleri

Herhangi bir zaman uyumsuz yöntem olduğu bir Sub yordam, ya da bir işlevi yordamı dönüş türüne sahip Task veya Task<TResult>.Herhangi bir yöntemi bildiremez ByRef parametreleri.

Belirttiğiniz Task(Of TResult) zaman uyumsuz yöntemin dönüş türü için dönmek TResult türündeki bir işlenen yöntemin ifadesi vardır.Kullandığınız Task yöntemi tamamlandığında, başka hiçbir anlamlı değeri döndürürse.Diğer bir deyişle, yöntemine çaðrý verir bir Task, ama ne zaman Task tamamlandı, herhangi bir Await beklediğini ifade Task bir sonuç değerini üretemiyor.

Zaman uyumsuz altyordamları öncelikle olay işleyicileri tanımlamak için kullanılır burada bir Sub yordamı gereklidir.Zaman uyumsuz yordam arayan beklemek edemez ve yöntemi atar özel durumlar yakalayamaz.

Daha fazla bilgi ve örnekler için bkz, Zaman uyumsuz dönüş türleri (C# ve Visual Basic).

Örnek

Aşağıdaki örnekler, bir zaman uyumsuz olay işleyicisi, bir zaman uyumsuz lambda ifadesi ve zaman uyumsuz yöntem gösterir.Bu öğeleri kullanan bir tam örnek için bkz: İzlenecek yol: zaman uyumsuz kullanarak Web'e erişme ve (C# ve Visual Basic) beklemek.Yönerge kodu karşıdan yükleyebileceğiniz Developer kod örnekleri.

' 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

Ayrıca bkz.

Görevler

İzlenecek yol: zaman uyumsuz kullanarak Web'e erişme ve (C# ve Visual Basic) beklemek

Başvuru

Beklemek işleci (Visual Basic)

AsyncStateMachineAttribute

Kavramlar

Zaman uyumsuz zaman uyumsuz programlama ve beklemek (C# ve Visual Basic)