Es scheint keine Linq-Unterstützung für IAsyncEnumerable zu geben, das mit .NET Core gepackt ist. Was ist der richtige Weg, um einfache Dinge wie ToList und Count ausführen zu können?
Es scheint keine Linq-Unterstützung für IAsyncEnumerable zu geben, das mit .NET Core gepackt ist. Was ist der richtige Weg, um einfache Dinge wie ToList und Count ausführen zu können?
Antworten:
Dies ist eine gute Frage, da es in IntelliSense praktisch keine nützlichen Elemente IAsyncEnumerable<T>
mit der impliziten Framework-Referenz gibt, die Sie mit einer Standard-.NET Core-App haben würden.
Es wird erwartet, dass Sie das Paket System.Linq.Async
(bekannt als Ix Async, siehe hier ) wie folgt hinzufügen :
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
Dann können Sie verwenden CountAsync
, oder ToListAsync
:
async IAsyncEnumerable<int> Numbers()
{
yield return 1;
await Task.Delay(100);
yield return 2;
}
var count = await Numbers().CountAsync();
var myList = await Numbers().ToListAsync();
Wie in einem Kommentar erwähnt, sind diese Methoden für sich genommen nicht so nützlich. Sie sollten verwendet werden, nachdem Sie die leistungsstärkeren Funktionen verwendet haben, während Ihre Daten als asynchroner Stream mit Dingen wie SelectAwait
und WhereAwait
usw. beibehalten werden.
async
Methode. Blockieren Sie es nicht, es sei denn, Sie wissen absolut, was Sie tun.