Laden...

GELÖST: Array+Task+ Lambda: Task[] tasks = new Task[] { lambda1,lambda2, ... }; klappt nicht

Erstellt von &(*null)->Hallo vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.123 Views
&
&(*null)->Hallo Themenstarter:in
4 Beiträge seit 2016
vor 7 Jahren
GELÖST: Array+Task+ Lambda: Task[] tasks = new Task[] { lambda1,lambda2, ... }; klappt nicht

Hallo,

warum klappt Folgendes nicht:


Task[] tasks = new Task[] { 
                      ()=>{object1.run;}, 
                      ()=>{object2.run;}, 
                      ()=>{object3.run;}, 
                      ()=>{object4.run;}  
};

Es kommt dann die Fehlermeldung, dass ein Lambda kein Delegat sei.

Wenn ich es einzeln machen würde mit Task t=new Task(()=>{...};), klappt es ja normal. Warum nicht bei einem Array wie oben? Es wird doch normal pro Element der Konstruktor Task (Action Action) aufgerufen oder läuft es bei einer Array-Initialisierung anders?

Nach Lektüre der Microsoftl-lib sehe ich als Lösung:


List<Task> tasks = new List<Task>();
foreach(){Task t = new Task( () => {...});}

Es müsste aber auch mit Array wie oben vorgestellt gehen?

Würde das funktionieren?


Task[] tasks = new Task[] { 
                      delegate{object1.run;}, 
                      delegate{object2.run;}, 
                      delegate{object3.run;}, 
                      delegate{object4.run;}  
};

Aber warum funktioniert dann nicht die Schreibweise mit ()=>? Ich habe C#10

1.040 Beiträge seit 2007
vor 7 Jahren

Ohne es geprüft zu haben:

new Task(()=>{object1.run;})

bei der Erstellung des Arrays nutzen.

Also so, wie du es einzelnd machst. 😉

M
33 Beiträge seit 2012
vor 7 Jahren

Versuchs dochmal mit


Task[] tasks = new Task[] {
    new Task(()=>{object1.run();}),
    new Task(()=>{object2.run();}),
    new Task(()=>{object3.run();}),
    new Task(()=>{object4.run();})
};

Falls fallend du vom Dach verschwandest, brems bevor du Unten landest.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

Warum nicht bei einem Array wie oben? Es wird doch normal pro Element der Konstruktor Task (Action Action) aufgerufen oder läuft es bei einer Array-Initialisierung anders?

Offensichtlich. Warum sollte er den Konstruktor für Task ausführen? Du erstellst ein Array mit Tasks, dann musst Du auch Tasks reinstecken - oder zumindest einen Typen, der eine implizite Konvertierung zu Task aufweist.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca