VB.NET Await

VB.NET Await
VB.NET Await

VB.NET Await

Du möchtest mehr über VB.NET Await lernen, verstehen und für die asynchrone Programmierung in deinem Programm verwenden?

Lerne in diesem Beitrag, wie Du die seit geraumer Zeit eingeführten Async/Await Schlüsselwörter verwenden kannst, um dein Programm und dessen Abläufe asynchron zu gestalten.

Gerne möchte ich Dich auch noch auf andere vielleicht für Dich interessante Beiträge hinweisen: Callbacks, AndAlso, BackgroundWorker Beispiel.

Da hängt doch alles!

Was im ersten Moment wie ein natürlich, menschliches Altersleiden klingt, kann man in der Programmierung vermeiden.

Wenn man sein Programm z. B. – aus welchen Gründen auch immer – zwischenzeitlich warten lassen möchte, kennt man den damaligen Aufwand nur zu gut.

Weitere Threads die „gespawnt“ und korrekt verarbeitet werden möchten, ein BackgroundWorker der wie im obigen angesprochenen Beispiel zum Einsatz kommt, uvm.

Es war in Vergangenheit teilweise ein relativer Graus.

Das wohl simpelste..

Beispiel der Welt.

Für das folgende Beispiel brauchst Du nur ein kinderleichtes Programm mit einem einzigen Button.

Natürlich kann der Code auch z. B. alternativ im Form Load-Ereignishandler platziert werden.

VB.NET Await Beispiel GUI
VB.NET Await Beispiel GUI

Code – VB.NET Await

Im jetzt kommenden Schritt erkläre ich Dir etwas mehr über die Details der Vorgehensweise im Code.

Ohne asynchrone Weise

VB.NET Form hängt bei Sleep
VB.NET Form hängt bei Sleep

Gehe für den nächsten Schritt in den Klick-Ereignishandler des Buttons und schaue Dir folgenden Code an:

Private Sub btnAwait_Click(sender As Object, e As EventArgs) Handles btnAwait.Click
    Debug.WriteLine("Before")
    Thread.Sleep(3000)
    Debug.WriteLine("After")
End Sub

Um den kommenden Effekt besonders verstehen undfühlen“ zu können, kannst Du den Button nun einmal testweise anklicken.

Versuche dann einmal die Form zu bewegen, jedoch wirst Du feststellen, dass da nichts mehr reagiert.

Das liegt daran, dass wir den MainThread (die grafische Oberfläche) – im wahrsten Sinne des Wortes – schlafen legen.

Frust – User Experience (UX)

Allerdings ist das freilich nicht das gewünschte Verhalten – in den meisten Fällen zumindest.

Wer möchte schon auf einen Button klicken und sich Fragen passiert da jetzt was?“?

Der typische ungeduldige Nutzer wird verständlicherweise noch einmal klicken und wieder kommt nichts dabei rum – seufz..

Jetzt asynchron – VB.NET Await

Nun stellen wir das Beispiel mit den tollen modernen Mitteln, also mit „VB.NET Await“, bzw. „VB.NET Async“ – verfügbar seit Visual Studio 2012 – um.

Das können wir in diesem Fall mit 2 wirklich sehr einfachen Änderungen erreichen!

Im ersten Schritt markieren wir die Methode mit dem Async-Modifizierer als asynchron.

Danach ersetzen wir die Warte-Funktion durch das passende Äquivalent aus der Task-Klasse namens Delay.

Private Async Sub btnAwait_Click(sender As Object, e As EventArgs) Handles btnAwait.Click
    Debug.WriteLine("Before")
    Await Task.Delay(3000)
    Debug.WriteLine("After")
End Sub

Der letzte hinzugekommen Teil, ist der Await-Operator, Welcher sehr einfach gesagt auf den Abschluss der Aufgabe wartet, Welche von Delay zurückgegeben wird.

Nun hängt nichts mehr!

VB.NET Form hängt nicht mehr bei Sleep
VB.NET Form hängt nicht mehr bei Sleep

Auch ohne Anti Aging Produkte – kleiner Spaß beiseite – hängt nun nichts mehr.

Probiere dies gerne sofort aus und klicke den Button nach den vorgenommenen Änderungen erneut an.

Nun wird der HoverEffekt des Buttons weiterhin sichtbar und du wirst bei ausreichendem Delay-Interval auch in der Lage sein die Form zu bewegen.

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.