Aracılığıyla paylaş


Beklemek işleci (Visual Basic)

Uyguladığınız Await awaited görev tamamlanıncaya kadar yönteminin çalışmasını askıya almak için zaman uyumsuz bir yöntem veya lambda ifadede bir işlenen işleci.Devam eden iş görevi temsil eder.

Hangi yöntemi Await kullanılan olmalıdır bir zaman uyumsuz değiştirici.Kullanılarak tanımlanmış tür bir yöntem, Async değiştiricisi ve genellikle içeren bir veya daha fazla Await ifadeleri olarak adlandırılmıştır bir zaman uyumsuz yöntem.

[!NOT]

Async Ve Await anahtar sözcükler Visual Studio 2012 tanıtılan.Bu sürümdeki 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).

Genellikle, geçerli olduğu için görev Await işleç uygulayan bir yöntem çağrısı gelen bir dönüş değeri olarak görev tabanlı zaman uyumsuz desen, diğer bir deyişle, bir Task veya Task<TResult>.

Aşağıdaki kodda, HttpClient yöntemi GetByteArrayAsync döndüren getContentsTask, Task(Of Byte()).Görev işlemi tamamlandığında gerçek bayt dizisi üretmek için promise olur.Await İşleci uygulandığı getContentsTask yürütme askıya almak için SumPageSizesAsync kadar getContentsTask tamamlandı.Bu arada, Denetim arayana döndürülen SumPageSizesAsync.Zaman getContentsTask tamamlandı, Await ifade için bir bayt dizisi olarak değerlendirilir.

Private Async Function SumPageSizesAsync() As Task

    ' To use the HttpClient type in desktop apps, you must include a using directive and add a 
    ' reference for the System.Net.Http namespace.
    Dim client As HttpClient = New HttpClient() 
    ' . . . 
    Dim getContentsTask As Task(Of Byte()) = client.GetByteArrayAsync(url)
    Dim urlContents As Byte() = Await getContentsTask

    ' Equivalently, now that you see how it works, you can write the same thing in a single line.
    'Dim urlContents As Byte() = Await client.GetByteArrayAsync(url)
    ' . . .
End Function
Önemli notÖnemli

Tam bir örnek için, bkz. İzlenecek yol: zaman uyumsuz kullanarak Web'e erişme ve (C# ve Visual Basic) beklemek.Örnek indirebilirsiniz Developer kod örnekleri Microsoft Web sitesi.AsyncWalkthrough_HttpClient projesinde örnektir.

Await Sonucunu döndüren bir yöntem çağrısı için uygulanan bir Task(Of TResult), türü Await TResult ifadesidir.Await Sonucunu döndüren bir yöntem çağrısı için uygulanan bir Task, Await ifade etmez bir değer döndürür.Aşağıdaki örnekte fark gösterilmektedir.

' Await used with a method that returns a Task(Of TResult).
Dim result As TResult = Await AsyncMethodThatReturnsTaskTResult()

' Await used with a method that returns a Task.
Await AsyncMethodThatReturnsTask()

Bir Await ifade ve deyimin iş parçacığı üzerinde yürüterek engelleyecek.Bunun yerine, sonra zaman uyumsuz yöntem geri kalan imzalamak derleyici neden olan Await awaited göreve devamı olarak ifade.Denetim daha sonra zaman uyumsuz yöntemini çağırana döndürür.Görevi tamamladığında, onun devamı ve kaldığı yerden zaman uyumsuz yöntem geri döndüğünde yürütülmesi çağırır.

Bir Await ifadesi olarak işaretlenmiş hemen kapsayan bir yöntem veya lambda ifade yalnızca gövdesinde meydana gelebilir bir Async değiştirici.Bu terim Await bu bağlamda yalnızca bir anahtar görevi görür.Başka bir yerde, tanımlayıcı olarak yorumlanır.Zaman uyumsuz yöntem veya lambda ifadesi içinde bir Await deyim içinde bir sorgu ifadesinde gerçekleştirilemez catch veya finally , engelleyecek bir deneyin...Catch...Son olarak deyiminde döngü denetim değişkeni İfade bir For veya For Each , döngü veya gövde metninde bir SyncLock ifadesi.

Özel Durumlar

Çoğu zaman uyumsuz yöntemleri döndürür bir Task veya Task<TResult>.Durumunu ve görev tamamlanmış olup, zaman uyumsuz yöntem bir özel duruma neden oldu veya iptal edildi ve nihai sonucu gibi geçmişi hakkında bilgi verilen görevin özelliklerini taşır.Await İşleç, bu özellikleri erişir.

Neden olan bir özel görev döndüren bir zaman uyumsuz yöntem bekler, Await işleç özel durumu yeniden oluşturur.

İptal edilirse, bir görev döndüren zaman uyumsuz yöntem bekler, Await işleç yeniden oluşturur bir OperationCanceledException.

Hatalı bir durumda tek bir görevi birden çok özel yansıtabilir.Örneğin, görev çağrısı sonucu olabilir Task.WhenAll.Böyle bir görev bekler, await işlemi yalnızca bir özel durumları yeniden oluşturur.Ancak, özel durumlar rethrown tahmin edemezsiniz.

Hata işleme zaman uyumsuz yöntemleri örnekleri için bkz: Try...Catch...Finally ifadesi (Visual Basic).

Örnek

Aşağıdaki Windows Forms örnek kullanımını gösterir Await bir zaman uyumsuz yöntem WaitAsynchronouslyAsync.Bu yöntem davranışını davranışı ile kontrast WaitSynchronously.Olmadan bir Await operatörü, WaitSynchronously zaman uyumlu olarak çalışır kullanılmasına rağmen Async değiştirici tanımına ve çağrı Thread.Sleep kendi gövdesinde.

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' Call the method that runs asynchronously.
    Dim result As String = Await WaitAsynchronouslyAsync()

    ' Call the method that runs synchronously.
    'Dim result As String = Await WaitSynchronously()

    ' Display the result.
    TextBox1.Text &= result
End Sub

' The following method runs asynchronously. The UI thread is not
' blocked during the delay. You can move or resize the Form1 window 
' while Task.Delay is running.
Public Async Function WaitAsynchronouslyAsync() As Task(Of String)
    Await Task.Delay(10000)
    Return "Finished"
End Function

' The following method runs synchronously, despite the use of Async.
' You cannot move or resize the Form1 window while Thread.Sleep
' is running because the UI thread is blocked.
Public Async Function WaitSynchronously() As Task(Of String)
    ' Import System.Threading for the Sleep method.
    Thread.Sleep(10000)
    Return "Finished"
End Function

Ayrıca bkz.

Görevler

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

Başvuru

Zaman uyumsuz (Visual Basic)

Kavramlar

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