Weiterhin die Aufgabe, nachdem alle Aufgaben fertig
Klasse-ich will Last 2 Sammlung asynchron mit Aufgabe und stoppen busyindicator -
Ich versuche, so Etwas wie dieses
var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
WaitingIndicatorViewModel.IsBusy = true;
var loadData1 = new Task<ObservableCollection<Data1>>(GetData1FromService).ContinueWith(t => Data1Collection = t.Result, uiScheduler);
var loadData2 = new Task<ObservableCollection<Data2>>(GetData2FromService).ContinueWith(t => Data2Collection = t.Result, uiScheduler);
Task.Factory.StartNew(() =>{
loadData1.Start();//<--Exception here
loadData2.Start();
Task.WaitAll(loadData1, loadData2);
})
.ContinueWith(o => WaitingIndicatorViewModel.IsBusy = false, uiScheduler);
Aber diese eine Ausnahme InvalidOperationException:Start may not be called on a continuation task.
Warum das nicht funktioniert und wie kann ich weiterhin die Aufgabe, nach Abschluss der beiden Aufgaben, ohne blockiert aktuellen thread?
- Welche Linie wirft die Ausnahme?
- Die Aufgaben, die loadData1 und loadData2 haben keine Relevanz hier?
- siehe editierten post @ChrisShain
- Nein @Tudor, das ist der ganze code, den ich habe, GetData1FromService und GetData2FromService Methoden nur Daten zurückgeben, ohne Aufgabe
- Wie sind loadChildAreasTask und loadAreaTypesTask definiert?
- Wo muss loadChildAreasTask und loadAreaTypesTask kommen?
- Sollte
loadData1
werdenloadChildAreasTask
? Ist das ein Tippfehler? - Nein @ChrisShain, sollte nicht, Marc hat Recht, ContinueWith ist eine weitere Aufgabe, die konnte nicht gestartet werden
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt:
Ich denke was du meinst ist:
Nun können Sie (später) Anruf:
Der Unterschied ist, dass wir bei der Zuordnung
loadData1
zu den äußersten Aufgabe. In deinem original-code, den Sie zuweisenloadData1
das ErgebnisContinueWith
, das ist etwas anderes (eine zweite Aufgabe, so dass Sie können warten oder weiter von der zweiten Aufgabe).Hinweis: wenn Sie möchten, warten Sie, bis die innere Aufgabe, sollten Sie erfassen das Ergebnis der
ContinueWith
Aufruf in eine neue variable, und warten auf , dass.