Unterschied zwischen Finden und FindAsync

Schreibe ich eine sehr, sehr einfache Abfrage, die bekommt nur ein Dokument aus einer Sammlung, die nach Ihrer eindeutigen Id. Nach einigen frusteration (ich bin neu in mongo und der async /await-Programmierung-Modell), ich habe dies aus:

IMongoCollection<TModel> collection = //...
FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
List<TModel> list = await task.ToListAsync();
TModel result = list.FirstOrDefault();
return result;

Funktioniert es, Super!!! Aber ich sehe immer wieder die Verweise auf einen "Find" - Methode, und ich erarbeitet:

IMongoCollection<TModel> collection = //...
IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
findFluent = findFluent.Limit(1);
TModel result = await findFluent.FirstOrDefaultAsync();
return result;

Als es stellt sich heraus, dass dies auch funktioniert, Super!!!

Ich bin mir sicher, dass es einigen wichtiger Grund, dass wir haben zwei verschiedene Möglichkeiten, um diese Ergebnisse zu erreichen. Was ist der Unterschied zwischen diesen Methoden, und warum sollte ich wählen einen über den anderen?

Die async - Schlüsselwort können Sie den compiler zu "managen", Ihren code mittels dem scheduler. Dies kann aber nicht immer machen Sie Ihre app multi-threaded. Die await keyword-Signale an den compiler, gute Punkte zu entscheiden und wechseln Sie den Kontext oder nutzen einen neuen thread.
Die async speziell nicht machen Sie Ihre app Multithread. Siehe hier. Dies ist nicht eine Frage zu C#, aber die Unterschiede in den Methoden zur Verfügung, von der MongoDB C# - API.
Was meinst du damit, dass FindAsync Zukunft nicht machen Sie Ihre app mit multi-Threading? Es gibt eine gute chance, es wird das tun, wenn Sie nicht await sofort.
Nein, wenn Sie Lesen, den link habe ich gepostet, werden Sie sehen, dass die Verwendung async und await wird explizit nicht threads erstellen. Es nicht schaffen einen hintergrund-thread, noch gibt Sie einen thread, um zu schlafen. Der springende Punkt bei der async und await ist der Verzicht auf die Kontrolle von einem thread, so dass eine message-loop können eine andere in der Warteschlange-up-Nachricht, die auf dem gleichen thread. Wenn das, was Sie awaiting nicht selbst ausführen, auf einen anderen thread, oder führen Sie eine hintergrund-Anfrage intrinsisch, hinzufügen await wird nicht dazu führen es. Das anti-Beispiel für die Verwendung await ist ein CPU-bound-Funktion.

InformationsquelleAutor object88 | 2015-06-04

Schreibe einen Kommentar