Aracılığıyla paylaş


Zaman Uyumsuz (Visual Basic)

Bir Async değiştiricisi, uyumsuzluğu değiştiren lambda ifadesi veya metotu gösterir.Bu tür yöntemler zaman uyumsuz metotlar olarak adlandırılır.

Bir zaman uyumsuz yöntem, çağrı yapanın iş parçacığını bloke etmeksizin uzun sürmesi muhtemel çalışmaların gerçekleştirilmesi için güvenilir bir yol sunar.Zaman uyumsuz yöntemi çağıran kişi, zaman uyumsuz yöntemin tamamlanmasını beklemeden işine devam edebilir.

[!NOT]

Async ve Await anahtar sözcükleri Visual Studio 2012'de kullanılmaya başlanmıştır.Zaman uyumsuz programlamaya giriş için bkz. Async ve Await ile Zaman Uyumsuz Programlama (C# ve Visual Basic).

Aşağıdaki örnek, bir zaman uyumsuz yöntemin yapısını gösterir.Kural olarak, zaman uyumsuz yöntem adları "Async." ile biter.

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

Genelde, bir yöntem en az bir await ifadesi veya deyimini içeren Async anahtar sözcüğü tarafından değiştirilen metotdur.Bekleyen görevleri tamamlanıncaya kadar bu noktada bekleten ilk Await 'a ulaşana kadar metodu zaman uyumlu olarak çalıtırır.Bu sırada, denetim metodu çağırana döner.Eğer metot bir Await ifade vaya hesap özeti içermiyorsa, bu metot askıda değildir ve zaman uyumlu bir yöntem olarak yürütür.Derleyici uyarı, bu durum bir hata belirtebileceğinden, Await içermeyen zaman uyumsuz yöntemler konusunda sizi uyarır.Daha fazla bilgi için bkz: derleyici hata.

Bir Async anahtar kelimesi ayrılmamış bir anahtar sözcüktür.Bir yöntem veya lambda ifadesi değiştirdiği zaman bir anahtar sözcüktür.Tüm diğer bağlamlarda bu, tanımlayıcı olarak yorumlanır.

Dönüş Türleri

Zaman uyumsuz bir yöntem aynı zamanda alt yordam veya bir işlev dönüş türü olan yordam Task veya Task dir.Metot ByRef parametreleri bildiremez.

Yöntemin return deyimi TResult türünde bir işlenen belirtirse zaman uyumsuz yöntem dönüş türü olarak Task(Of TResult) belirtin.Yöntem tamamlandığında anlamlı bir değer döndürülmezse Task kullanırsınız.Bu, Task ü döndüren yöntemi çağırmadır ancak Task tamamlandığı zaman, Task i bekleyen herhangi bir Await hesap özeti sonuç değerini üretemez

Zaman uyumsuz altrutinler, öncelikle bir Sub yordamının gerekli olduğu yerde olan olay işleyicileri tanımlamak için kullanılırZaman uyumsuz subrutinin çağırıcısı onu bekleyemez ve yöntemin oluşturduğu özel durumları yakalayamaz.

Daha fazla bilgi ve örnek için bkz. Zaman Uyumsuz Dönüş Türleri (C# ve Visual Basic).

Örnek

Aşağıdaki örnekler, zaman uyumsuz olay işleyicisini, bir zaman uyumsuz lambda ifadesini ve zaman uyumsuz yöntemi gösterir.Bu öğeleri kullanan eksiksiz bir örnek için bkz. İzlenecek yol: Async ve Await Kullanarak Web'e Erişme (C# ve Visual Basic).Örnek kodu Geliştirici Kodu Örnekleri sayfasından indirebilirsiniz.

' 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: Async ve Await Kullanarak Web'e Erişme (C# ve Visual Basic)

Başvuru

Await İşleci (Visual Basic)

AsyncStateMachineAttribute

Kavramlar

Async ve Await ile Zaman Uyumsuz Programlama (C# ve Visual Basic)