Kürzlich stieß ich auf ein Problem beim Aufrufen der asynchronen Methode. Hier ist der Code:Asynchrone Methode C# WhenAll Ausgabe
ClassA storage = new ClassA();// this is member of the class
async Task<ClassA> InitClassAObject(){ // async method of the class
List<Task> taskList = new List<Task>(); // create list task
taskList.Add(Func1());
taskList.Add(Func2());
taskList.Add(Func3());
await Task.WhenAll(taskList.ToArray()); // wait for all task done
return storage; // <--- this line never be hit
}
async Task Func1(){
await Task.Run(() =>{
//update property A of storage
//example storage.A = GetDataFromSomeWhere();
});
}
async Task Func2(){
await Task.Run(() =>{
//update property B of storage
//example storage.B = GetDataFromSomeWhereElse();
});
}
...
Frage 1: Die Methode InitClassAObject() nie zurückgibt. Haltepunkt bei "Return nie".
Frage 2: Wenn ich mehrere asynchrone Methode aufrufen und sie verschiedene Eigenschaften des Objekts ClassA aktualisieren. Ist das sicher?
Ich habe nach einer Lösung gesucht, aber immer noch nicht gefunden. Danke.
Vielleicht werden alle Aufgaben nie abgeschlossen? – Magnus
Haben Sie getestet, was 'Func1',' Func2' und 'Func3' machen? Wenn 'return storage' _never_ geschlagen wird, dann wahrscheinlich, weil mindestens eine dieser Aufgaben nicht abgeschlossen ist. –
Danke für Ihren Kommentar. Dies funktioniert, wenn ich synchron Func1() aufrufe; Funct2(); .. Dann wechsle ich zu diesem Ansatz und es funktioniert nicht mehr. Dann nehme ich an, dass mit diesen Funktionen nichts falsch ist. Ich werde sie jedoch nochmals verifizieren. –