Laden...

Programm mit Actions und Tasks beendet sich, obwohl noch Tasks laufen

Erstellt von ErikM vor 10 Jahren Letzter Beitrag vor 10 Jahren 681 Views
E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 10 Jahren
Programm mit Actions und Tasks beendet sich, obwohl noch Tasks laufen

Halöle,

ich habe hier eine relativ kleine Anwendung in der ich mal Tasks anstatt von Threads u. BackgroundWorker verwenden wollte..


private static void Main(string[] args)
        {
            
            Action updateAction = new Action(() =>
                {
                    UpdateController updateController = new UpdateController();
                    updateController.UpdateOperation(); 

                });

            Task updateTask = new Task(updateAction, TaskCreationOptions.LongRunning);
       
            Action<Task> finshedUpdateNotityAction = new Action<Task>(FinishedUpdateNotify);
            updateTask.ContinueWith(finshedUpdateNotityAction);
            
            updateTask.Start();

            
        }

        public static void FinishedUpdateNotify(Task task)
        {

            Console.WriteLine("\n\nUpdate abgeschlossen"); 
        }

Das Programm sollte eigentlich starten..
Eine Action erzeugen, die eine Instanz von UpdateController erzeugt und dort die Methode "updateController.UpdateOperation()" startet.. Danach.. also wenn dieser Task beendet ist, sollte mit ContinueWith nur eine Meldung ausgegeben werden.

Jedoch wird keine Instanz erzeugt und das Programm beendet sich ohne Fehlermeldung 😦
Verstehe ich irgendwas falsch ?. . Was läuft da schief ?

E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 10 Jahren

Wenn ich nach dem "ContinueWith" - Ausdruck noch ein "updateTask.Wait()" mit dranhänge arbeitet das Programm wie erwartet.. merkwürdig

849 Beiträge seit 2006
vor 10 Jahren

Hallo,

das ist nicht merkwürdig, das ist so wie es sein soll.

Dein Hauptthread (Der Main() ausführt) beendet sich sobald er aus Main() herausläuft. Wenn dieser beendet ist, beendet sich auch dein Programm und nimmt alle Tasks mit.

Mit Wait sagst Du der Main() Methode das sie auf die Ausführung des Tasks warten soll. Main() wird nicht vorzeitig beendet -> alles tutti

Gruß

E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 10 Jahren

Ja.. langsam dämmert es mir :3..

Danke ! 👍