Ist es korrekt, wenn ich wait + ToListAsync () über IQueryable verwende, das nicht als Aufgabe definiert ist

7

Ich benutze asp.net mvc-5 mit EF-6, und ich bin mir nicht sicher, ob die Verwendung von wait + ToListAsync gültig ist. Zum Beispiel habe ich die folgende Repository-Methode, die eine IQeurable zurückgibt: -

%Vor%

Und ich nenne es wie folgt: -

%Vor%

Am Anfang werde ich zwar einen Fehler bekommen, weil ich eine Methode "erwarte", die nicht als eine Aufgabe definiert ist, aber das obige hat gut funktioniert, also kann jemand bitte hier raten?

    
john G 24.09.2015, 11:16
quelle

3 Antworten

12
  

Am Anfang werde ich zwar einen Fehler bekommen, weil ich ihn benutze   "erwarten" eine Methode, die nicht als eine Aufgabe definiert ist, aber das obige funktioniert   gut

Sie warten auf eine Methode, die ein Task<T> zurückgibt, wobei T ein List<TSet> ist. Wenn Sie sich die Erweiterungsmethode QueryableExtensions.ToListAsync ansehen, Ich sehe, dass es ein Task<List<TSource>> zurückgibt. Sie warten asynchron auf diese Methode, um die Datenbank abzufragen, die Liste zu erstellen und sie an den Aufrufer zurückzugeben. Wenn Sie await für eine solche Methode angeben, kehrt die Methode erst zurück, wenn die Operation abgeschlossen ist. async-await lässt Ihren Code synchron erscheinen, während die Ausführung tatsächlich asynchron ist.

    
Yuval Itzchakov 24.09.2015, 11:45
quelle
9

Eigentlich gibt es kein Problem, weil Sie die ToListAsync() nicht die getAllScanEmailTo() kennen.

BEARBEITEN: Um zu sehen, wie das async-await-Muster funktioniert, können Sie dies sehen link . Hier ist ein nützliches Bild von dort

    
Hossein Narimani Rad 24.09.2015 11:19
quelle
2

Sie erwarten nicht "eine Methode". Sie warten auf ein Task , was ein Muss ist.

Sie rufen getAllScanEmailTo auf, das eine IQueryable<TSet> zurückgibt, für die Sie dann ToListAsync aufrufen, die den Task<List<TSet>> zurückgibt, auf den Sie warten.

    
i3arnon 24.09.2015 11:21
quelle