Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
.NET 10 memperkenalkan AsyncEnumerable kelas , yang menyediakan serangkaian lengkap metode ekstensi LINQ untuk jenis tersebut IAsyncEnumerable<T> . Kelas ini menggantikan pustaka NuGet yang dikelola System.Linq.Async komunitas, berpotensi menyebabkan kesalahan kompilasi karena ambiguitas.
Versi yang diperkenalkan
.NET 10
Perilaku sebelumnya
Sebelumnya, AsyncEnumerable kelas dalam paket yang dikelola oleh System.Linq.Async komunitas memberikan dukungan LINQ untuk IAsyncEnumerable<T>.
Perilaku baru
Kelas AsyncEnumerable di .NET 10, dan dalam System.Linq.AsyncEnumerable paket NuGet, menyediakan dukungan LINQ untuk IAsyncEnumerable<T>.
Jenis perubahan yang memutus kompatibilitas
Perubahan ini dapat memengaruhi kompatibilitas sumber.
Alasan perubahan
IAsyncEnumerable<T> adalah antarmuka yang umum digunakan, sehingga platform itu sendiri harus memberikan dukungan LINQ untuk jenis tersebut. Pengelola System.Linq.Async dan anggota komunitas lainnya mengajukan petisi untuk dimasukkan langsung di platform.
Tindakan yang direkomendasikan
Jika Anda meningkatkan ke .NET 10 dan kode Anda menyertakan referensi paket langsung ke System.Linq.Async, hapus referensi paket tersebut atau tingkatkan ke versi 7.0.0. Untuk multitarget baik .NET 10 maupun versi sebelumnya, tambahkan referensi paket ke System.Linq.AsyncEnumerable sebagai gantinya.
Jika System.Linq.Async digunakan secara tidak langsung melalui paket lain, hindari kesalahan ambiguitas dengan menambahkan <ExcludeAssets> metadata dengan nilai compile atau all:
Untuk mengizinkan penggunaan secara transitif, atur
System.Linq.Asyncke<ExcludeAssets>.<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Konfigurasi ini mencegah penggunaan langsung dalam kode Anda sambil memungkinkan paket lain untuk terus menggunakan System.Linq.Async secara internal.
Untuk pengecualian lengkap, atur
<ExcludeAssets>keall:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Gunakan konfigurasi ini hanya jika Anda yakin tidak ada dependensi yang memerlukan System.Linq.Async saat runtime.
Sebagian besar kode yang mengkonsumsi harus kompatibel tanpa perubahan, tetapi beberapa situs panggilan mungkin memerlukan pembaruan untuk merujuk ke nama dan tanda tangan yang lebih baru. Misalnya, Select panggilan seperti e.Select(i => i * 2) berfungsi sama sebelum dan sesudah. Namun, panggilan e.SelectAwait(async (int i, CancellationToken ct) => i * 2) perlu diubah untuk digunakan Select alih-alih SelectAwait, seperti dalam e.Select(async (int i, CancellationToken ct) => i * 2).
Untuk set lengkap metode ekstensi LINQ yang tersedia untuk IAsyncEnumerable<T>, lihat dokumentasi SYSTEM.Linq.AsyncEnumerable API.