共用方式為


.NET 10 中的 System.Linq.AsyncEnumerable

.NET 10 引入了 AsyncEnumerable 類別,它為 IAsyncEnumerable<T> 類型提供了一整套 LINQ 擴展方法。 此類別取代了社群維護的 NuGet 程式庫,可能因為模糊不清而導致編譯錯誤。

推出的版本

.NET 10

先前的行為

先前在AsyncEnumerable社群維護的System.Linq.Async套件中的類別提供了LINQ的支援IAsyncEnumerable<T>

新行為

.NET 10 中的 AsyncEnumerable 類別,以及 System.Linq.AsyncEnumerable NuGet 套件,為 IAsyncEnumerable<T> 提供 LINQ 支援。

破壞性變更的類型

此變更可能會影響 來源相容性

變更的原因

IAsyncEnumerable<T> 是一個常用的接口,因此平台本身應該為該類型提供 LINQ 支援。 System.Linq.Async的維護者和其他社群成員請願要求直接在平台中納入。

如果你正在升級到 .NET 10,且你的程式碼包含直接的套件參考, System.Linq.Async請移除該套件參考或 升級到 7.0.0 版本。 若要同時支援 .NET 10 和較舊版本,請改為新增 System.Linq.AsyncEnumerable 的套件參考。

如果透過另一個套件間接取用,請 System.Linq.Async 新增 <ExcludeAssets>compile 為 或 all的中繼資料,以避免歧義錯誤:

  • 若要允許傳遞使用 System.Linq.Async,請將 <ExcludeAssets> 設定為 compile

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

    此設定可防止在程式碼中直接使用,同時允許其他套件繼續在內部使用 System.Linq.Async。

  • 若要完全排除,請設定 <ExcludeAssets>all

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

    只有在你確定執行時沒有依賴需要 System.Linq.Async 時,才使用這個設定。

大多數消耗程式碼應該可以不用更改就能兼容,但有些呼叫端可能需要更新以引用更新的名稱和簽名。 例如,像 Select 這樣的呼叫 e.Select(i => i * 2),在前後的運作方式都相同。 然而, e.SelectAwait(async (int i, CancellationToken ct) => i * 2) 呼叫需要改為使用 Select ,而非 SelectAwait,如 e.Select(async (int i, CancellationToken ct) => i * 2)

關於完整的 IAsyncEnumerable<T>LINQ 擴充方法集合,請參閱 System.Linq.AsyncEnumerable API 文件

受影響的 API