Ich versuche, meinen ursprünglichen CodeFühren Sie eine Asynchron-Aufgaben Haufen, wenn eine bestimmte Ausführungsreihenfolge
for(var item in items)
{
dbAccess.Save(item);
}
die gut arbeitet, um asynchronize: Allerdings
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
, ich brauche eine hinzufügen zusätzlicher Anruf Bereinigungs bevor ich spare und Element in meine DB:
var tasks = new List<Task>();
for(var item in items)
{
tasks.Add(dbAccess.DeleteAsync(item.id));
tasks.Add(dbAccess.SaveAsync(item));
}
await Task.WhenAll(tasks);
Dieser Code oben ist falsch, da SaveAs ync sollte nicht ausgeführt werden, bis das entsprechende DeleteAsync beendet ist. Mit anderen Worten, die Löschung muss immer vor dem Speichern für jeden Artikel ausgeführt werden, aber die Reihenfolge der Artikel spielt keine Rolle.
Gibt es einen perfekten Weg, dies zu tun?
Wie wäre es mit der Ausgabe aller Löschungen zuerst, warten auf sie, dann alle Saves ausgeben und dann auf diese warten? Andernfalls sollten Sie jedes Löschen + Speichern in eine einzelne Aufgabe packen. –
Guter Punkt Lasse, ich habe meinen Code für den Zweck dieser Frage vereinfacht. Ich kann Ihren Vorschlag nicht umsetzen, weil es ein bisschen mehr gibt, das ich nicht zeige. Tatsächlich gibt DeleteAsync etwas anderes zurück, das an SaveAsync übergeben werden muss. – AstroSharp
Also? Packen Sie sie in eine Aufgabe, die zuerst deleteasync aufruft und anschließend saveasync aufruft? –