Await Async TaskWhenAll

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Moin moin

    Ja das mit der "Nebenläufigkeit".
    Als ich z.B. begonnen habe, mit Klassen und Events zu arbeiten um z.B. Ausgaben auf der GUI zu ändern, war es oft so, das es manchmal ohne diese "Invoks" klappte und manchmal nicht.
    Das brachte mich immer wieder durcheinander, verwirrte mich.

    Dann laß ich irgendwann If Me.InvokeRequired Then. Da dachte ich dann erst, klasse brauche ich mich nicht drum zu kümmern, macht ja das .Net
    Später dachte ich mir, weil ich immer wieder auf das Thema "CleanCode" hingewiesen wurde, das kann ja nicht die Lösung sein...was mich wieder verwirrte. :S
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Es stellt sich natürlich auch immer die Nebenbeifrage: Wieviel GUI-Änderung ist nebenläufig überhaupt sinnvoll. Manchmal kann man das auch sinnvoller lösen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Manchmal kann man das auch sinnvoller lösen.


    Beispiel: Ich will den User über etwas, was eine Methode erarbeitet hat informieren.
    Das kann ich mit Events oder Returns machen. Richtig :?:
    Da kann ich dann eine MessageBox aufpoppen lassen oder ein Control (Label etc.) ändern...

    Bei beiden laufe ich Gefahr des "nicht Invoke" :?:
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Das ist mir zu unkonkret, um das beantworten zu können. Wenn es um einen nebenläufigen Prozess geht, der über seinen Zwinschenzustand informieren will, dann ist ein Controlupdate eine passende Möglichkeit, die dann mit Invoke einhergehen muss.
    Eine MessageBox stoppt während ihrer Existenz/Sichtbarkeit den Thread, in dem sie aufgerufen wird. Wenn das kein Problem ist, ist die MessageBox ok. Für die braucht man aber kein Invoke.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Das ist mir zu unkonkret

    hmm... Ich weiß gerade nicht wie ich das "genauer" beschreiben soll oder was Du lesen möchtest.

    Zu der MsgBox:
    Ich hatte mal ganz zu Begin als ich mit Async angefangen habe, immer den Fehler "Threadübergeifender Vorgang.. mit einer Messagebox. Kann mich aber nicht mehr erinnern was das genau war. War in irgendeinem Übungsprojekt ...
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Wo wir hier aber auch bei Async Await waren. Das hier geht, wobei nach meinem Verständnis Button1_Click im Hauptthread läuft. Die von Await aufgerufene Test Methode sollte somit auf nen anderen Thread gehen, also nebenläufig, oder? Der schreibt trotzdem an die Textbox.

    VB.NET-Quellcode

    1. Private Async Sub Button1_Click(sender as Object, e as EventHandler) Handles Button1.Click
    2. Await Test
    3. End Sub
    4. Private Async Function Test() as Task
    5. Write("ABC")
    6. Await Task.Delay(1000)
    7. End Function
    8. Private Sub Write(s as String)
    9. RichTextBox1.Text = s
    10. End Sub
    So eine Art Write Methode habe ich gerne für eine kleine Console auf meinem Form, die mir einen kurzfristigen Arbeitsstatus durchgibt.