Sdílet prostřednictvím


System.Linq.AsyncEnumerable v .NET 10

.NET 10 zavádí AsyncEnumerable třídu, která poskytuje úplnou sadu metod rozšíření LINQ pro typ IAsyncEnumerable<T> . Tato třída nahrazuje knihovnu NuGet spravovanou System.Linq.Async komunitou, což může způsobit chyby kompilace z důvodu nejednoznačností.

Verze byla představena

.NET 10

Předchozí chování

AsyncEnumerable Dříve třída v balíčku udržovaném System.Linq.Async komunitou poskytovala podporu LINQ pro IAsyncEnumerable<T>.

Nové chování

Třída AsyncEnumerable v .NET 10 a v System.Linq.AsyncEnumerable balíčku NuGet poskytuje podporu LINQ pro IAsyncEnumerable<T>.

Typ zásadní změny

Tato změna může mít vliv na kompatibilitu zdroje.

Důvod změny

IAsyncEnumerable<T> je běžně používané rozhraní, takže samotná platforma by měla poskytovat podporu LINQ pro typ. Správci System.Linq.Async a další členové komunity požádali o začlenění přímo do platformy.

Pokud upgradujete na .NET 10 a váš kód obsahuje přímý odkaz na System.Linq.Asyncbalíček, odeberte tento odkaz na balíček nebo upgradujte na verzi 7.0.0. Místo toho přidejte odkaz na balíček pro multitargeting jak na .NET 10, tak na předchozí verzi.

Pokud System.Linq.Async se využívá nepřímo prostřednictvím jiného balíčku, vyhněte se nejednoznačným chybám přidáním <ExcludeAssets> metadat s hodnotou compile nebo all:

  • Chcete-li povolit tranzitivní použití System.Linq.Async, nastavte <ExcludeAssets> na compile:

    <PackageReference Include="System.Linq.Async" Version="6.0.1">
      <ExcludeAssets>compile</ExcludeAssets>
    </PackageReference>
    

    Tato konfigurace brání přímému použití v kódu a umožňuje ostatním balíčkům interně používat System.Linq.Async.

  • Pro úplné vyloučení nastavte <ExcludeAssets> na all.

    <PackageReference Include="System.Linq.Async" Version="6.0.1">
      <ExcludeAssets>all</ExcludeAssets>
    </PackageReference>
    

    Tuto konfiguraci použijte pouze v případě, že jste si jisti, že žádné závislosti nevyžadují System.Linq.Async v době běhu.

Většina kódu by měla být kompatibilní bez změn, ale některá místa volání mohou potřebovat aktualizace, aby odkazovala na novější názvy a signatury. Například volání funkce Select jako e.Select(i => i * 2) funguje stejně před i po. Volání e.SelectAwait(async (int i, CancellationToken ct) => i * 2) však musí být změněno tak, aby se používalo Select místo SelectAwait, jako v e.Select(async (int i, CancellationToken ct) => i * 2).

Úplnou sadu dostupných rozšiřujících metod IAsyncEnumerable<T>LINQ naleznete v dokumentaci k rozhraní API System.Linq.AsyncEnumerable.

Ovlivněná rozhraní API