Ich verwende Dapper in einer WPF-Anwendung, um Daten für eine Reihe von Combobox-Listen aus einer Datenbank abzurufen. Ich möchte, dass das Abrufen im Hintergrund erfolgt. Dadurch wird eine kleine Verzögerung verhindert, wenn der Benutzer das erste Kombinationsfeld öffnet.
Also habe ich das gemacht:
private Task<IEnumerable<T_Program>> _allTapes;
// Binds to combobox ItemsSource
public IEnumerable<T_Program> Tapes =>
_allTapes.Result.Where(x => x.Program.Equals(Program));
Und im Konstruktor meines View-Modells:
_allTapes = _conn.GetAllAsync<T_Program>();
Aber ich habe nicht die "Leistungsverbesserung" bekommen, die ich wollte.
Wenn Sie den Cursor beim Debuggen über _allTapes
die folgende Beschreibung _allTapes
:
Id = 6722, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
Es scheint also, dass die GetAllAsync
Methode von Dapper die Abfrage erst ausführt, wenn sie dazu gezwungen wird, das Result
von der Task abzurufen.
Wie erhalte ich die gewünschte Hintergrundausführung?
Sie weisen das Task-Objekt derzeit nur _allTapes zu.
Versuchen
_allTapes = await _conn.GetAllAsync<T_Program>().ConfigureAwait(false);