Ja, wir haben IEnumerable in der GA-Version von Reliable Collections entfernt. Wie Allan T erwähnt, sind zuverlässige Sammlungen nicht wirklich dieselben wie normale .NET-Sammlungen, obwohl sie die gleichen grundlegenden Datenstrukturen darstellen. Einer der großen Unterschiede, den Sie wahrscheinlich bemerkt haben, ist, dass alle Operationen asynchron sind, weil Semantik und I/O für die Replikation und das Lesen von Festplatten gesperrt sind. Es ist der letzte Teil, der die Entscheidungen zur Entfernung von IEnumerable vorangetrieben hat, weil es streng synchron ist und wir nicht sind. Stattdessen verwenden wir jetzt IAsyncEnumerable, das die vollständigen LINQ-Erweiterungsmethoden noch nicht unterstützt.
Wir arbeiten an asynchronen LINQ-Erweiterungsmethoden, aber in der Zwischenzeit gibt es mehrere Möglichkeiten, mit IAsyncEnumerable zu arbeiten.
Eli Arbel has async extension methods on Gist, die eine Brücke zu System.Interactive.Async und auch asynchrone Implementierungen von Select, SelectMany und Where bieten.
Oder Sie können wrap IAsyncEnumerable in a regular IEnumerable, die einfach die asynchronen Aufrufe mit synchronen Methoden umschließt, und das wird Ihnen die vollständige Reihe von Methoden LINQ-Erweiterungen wieder. Dann können Sie die Erweiterungsmethode in einer regulären LINQ-Abfrage verwenden:
using (ITransaction tx = this.StateManager.CreateTransaction())
{
var x = from item in (await clusterDictionary.CreateEnumerableAsync(tx)).ToEnumerable()
where item.Value.Status == ClusterStatus.Ready
orderby item.Value.CreatedOn descending
select new ClusterView(
item.Key,
item.Value.AppCount,
item.Value.ServiceCount,
item.Value.Users.Count(),
this.config.MaximumUsersPerCluster,
this.config.MaximumClusterUptime - (DateTimeOffset.UtcNow - item.Value.CreatedOn.ToUniversalTime()));
}
Nur eine kleine Anmerkung - die Erweiterungen bieten eine Brücke zur Ix-Async NuGet-Bibliothek, die eine ** vollständige ** asynchrone LINQ-Implementierung enthält. Der Basisteil bezieht sich auf die asynchronen Versionen der Operatoren, von denen ich nur 'SelectAsync',' SelectManyAsync' und 'WhereAsync' implementiert habe. –
(Diese asynchronen Operatoren unterstützen Szenarien wie Querabfragen anderer Sammlungen) –
Danke für die Klarstellung , Eli, ich habe meine Antwort aktualisiert. –