Wie ist ein IAsyncCursor verwendet für die iteration mit der mongodb c# driver?
Ich versuche, um eine Liste aller Datenbanken, in meinem server und schließlich drucken Sie Sie aus (d.h. Ihre Namen als string
s). Mit der vorherigen version der c# - Treiber, den ich nennen könnte, die Server.GetDatabases()
, aber das wurde ersetzt mit ListDatabasesAsync()
.
Der Rückgabewert ist eine IAsyncCursor<>
und ich bin mir nicht sicher, was zu tun ist. Wie macht man eine Iteration durch die Liste der Datenbanken (oder nichts) mit so einen cursor?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: verwenden Sie die
ForEachAsync
extension Methode:Lange Antwort: Traditionellen iteration in C# erfolgt mit
IEnumerable
undforeach
.foreach
ist der compiler syntaktische Zucker. Es ist eigentlich ein AufrufGetEnumerator
eineusing
Bereich und einwhile
Schleife. Aber das unterstützt keine asynchronen Operationen:IAsyncCursor
entsprichtIEnumerator
(das ErgebnisIEnumerable.GetEnumerator
), währendIAsyncCursorSource
istIEnumerable
. Der Unterschied ist, dass diese Unterstützungasync
(und bekommen Sie einen Stapel in jeder iteration und nicht nur einem einzigen Element). Sie können nichtforeach
wie es ist gebaut fürIEnumerable
aber Sie implementieren können, das ganzeusing
,while
Schleife Sache:Aber das ist eine Menge von boilerplate, damit der Fahrer fügt die Erweiterung Methoden zur
IAsyncCursor
wieForEachAsync
,ToListAsync
und so weiter.Dass deckt die meisten Anwendungsfälle aber für andere, die Sie noch brauchen, um zu implementieren, die iteration selbst.
ForEachAsync
und speichern Sie es zurück zu db mitReplaceOneAsync
? Änderungen in diesem Fall sind zu Komplex, zu verwendenUpdateManyAsync