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
Ohne es geprüft zu haben:
new Task(()=>{object1.run;})
bei der Erstellung des Arrays nutzen.
Also so, wie du es einzelnd machst. 😉
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.
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