Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Beklenen görev tamamlanana kadar yöntemin yürütülmesini Await askıya almak için işlecini zaman uyumsuz bir yöntemde veya lambda ifadesinde işlenene uygularsınız. Görev, devam eden çalışmayı temsil eder.
Kullanılan yöntemin Awaitzaman uyumsuz değiştiricisi olmalıdır. Değiştirici kullanılarak Async tanımlanan ve genellikle bir veya daha fazla Await ifade içeren bu tür bir yöntem, zaman uyumsuz yöntem olarak adlandırılır.
Uyarı
Async ve Await anahtar sözcükleri Visual Studio 2012'de kullanıma sunulmuştur. Zaman uyumsuz programlamaya giriş için bkz. Async ve Await ile Zaman Uyumsuz Programlama.
Genellikle, işlecini Await uyguladığınız görev, Task-Based Zaman Uyumsuz Desenini uygulayan bir yönteme yapılan çağrıdan dönüş değeridir, yani bir Task veya Task<TResult>.
Aşağıdaki kodda HttpClient yöntemiGetByteArrayAsync, bir Task(Of Byte())döndürürgetContentsTask. Görev, işlem tamamlandığında gerçek bayt dizisini üretmeye yönelik bir sözdür. İşleçAwait, tamamlanana kadar getContentsTask içinde SumPageSizesAsync yürütmeyi askıya almak için getContentsTask uygulanır. Bu arada, denetim öğesini çağırana SumPageSizesAsyncdöndürülür. tamamlandığında getContentsTask , Await ifade 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
Tam örnek için bkz . İzlenecek Yol: Async ve Await Kullanarak Web'e Erişme. Örneği .NET Örnek Tarayıcısı'ndan indirebilirsiniz. Örnek kod SerialAsyncExample projesindedir.
döndüren bir yöntem çağrısının Task(Of TResult)sonucuna uygulanırsaAwait, ifadenin Await türü TResult olur. döndüren TaskAwait bir yöntem çağrısının sonucuna uygulanırsaAwait, ifade bir değer döndürmez. 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()
İfade Await veya deyim, yürütülmekte olduğu iş parçacığını engellemez. Bunun yerine, derleyicinin zaman uyumsuz yöntemin geri kalanını ifadeden Await sonra beklenen görevde devamı olarak kaydolmasına neden olur. Ardından Denetim, zaman uyumsuz yöntemi çağırana döner. Görev tamamlandığında, devamını çağırır ve zaman uyumsuz yöntemin yürütülmesi kaldığı yerden devam eder.
İfade Await yalnızca bir değiştirici tarafından Async işaretlenen hemen kapsayan bir yöntemin veya lambda ifadesinin gövdesinde oluşabilir.
Await terimi yalnızca bu bağlamda anahtar sözcük olarak görev alır. Başka bir yerde tanımlayıcı olarak yorumlanır.
Async Yöntem veya lambda ifadesi içinde, bir Await sorgu ifadesinde, Try... öğesinin Catch veya Finally bloğunda bir ifade oluşamaz. Tutmak... Finally deyimi, bir For veya For Each döngüsünün döngü denetimi değişken ifadesinde veya SyncLock deyiminin gövdesinde.
Özel durumlar
Çoğu zaman uyumsuz yöntem veya TaskTask<TResult>döndürür. Döndürülen görevin özellikleri, görevin tamamlanıp tamamlanmadığı, zaman uyumsuz yöntemin özel duruma neden olup olmadığı veya iptal edilip edilmediği ve nihai sonucun ne olduğu gibi, durumu ve geçmişi hakkında bilgi taşır. işleç Await bu özelliklere erişir.
Özel duruma neden olan bir görev döndüren zaman uyumsuz yöntem beklerseniz, Await işleç özel durumu yeniden oluşturur.
İptal edilen, görev döndüren bir zaman uyumsuz yöntem beklerseniz, Await işleci bir OperationCanceledExceptionyeniden oluşturur.
Hatalı durumdaki tek bir görev birden çok özel durumu yansıtabilir. Örneğin, görev çağrısının Task.WhenAllsonucu olabilir. Böyle bir görevi beklediğiniz zaman await işlemi özel durumlardan yalnızca birini yeniden oluşturur. Ancak, hangi özel durumların yeniden oluşturulduğuna ilişkin tahminde bulunanamazsınız.
Zaman uyumsuz yöntemlerdeki hata işleme örnekleri için bkz . Try... Tutmak... Finally Deyimi.
Örnek
Aşağıdaki Windows Forms örneği, zaman uyumsuz bir yöntemde WaitAsynchronouslyAsynckullanımını Await gösterir. Bu yöntemin davranışını davranışıyla karşıtlık.WaitSynchronously İşleç Await olmadan, WaitSynchronously tanımında değiştiricinin ve gövdesinde çağrısının Async kullanılmasına Thread.Sleep rağmen zaman uyumlu bir şekilde çalışır.
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