C# 8.0 是不是支持 IAsyncEnumerable?

Posted

技术标签:

【中文标题】C# 8.0 是不是支持 IAsyncEnumerable?【英文标题】:Is IAsyncEnumerable supported in C# 8.0?C# 8.0 是否支持 IAsyncEnumerable? 【发布时间】:2019-09-13 06:15:12 【问题描述】:

真的很难找到关于IAsyncEnumerable 的任何信息,除了在'What's New c# 8.0' 文章中提到的一些信息。尝试在启用了 netstandard 2.0 和 C# 8 的 Visual Studio 2019 中使用它,它确实可以识别该类,但我在构建时遇到大量错误:

【问题讨论】:

有错误信息的图片吗? C# 8 支持这些东西,但没有定义它们。您需要以 .NET 版本为目标,目前它只是 .NET Core 3.0 的预览版。 【参考方案1】:

C# 8 支持这些功能。但是,这不适用于 .Net 标准 2.0

IAsyncEnumerable Interface

适用于

.NET Core 3.0 预览版 3

.NET Standard 2.1 预览版

您必须获得其中一个预览。

您可以在此处找到有关 .Net Core 3 预览的更多信息

https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-4/

https://dotnet.microsoft.com/download/dotnet-core/3.0

【讨论】:

所以对于任何打算尝试这个的人来说只是一个提醒,不幸的是,如果你将Net Core 3.0EntityframeworkCore一起使用,它将无法工作,因为以下错误:Error CS0433 The type 'IAsyncEnumerable<T>' exists in both 'System.Interactive.Async, Version=3.2.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263' and 'System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 我自己也遇到了上面的评论。试图通过为数据提供 InMemory 数据库来尝试 IAsyncEnumerable,但不行!梦想破灭。【参考方案2】:

对于 .NET Standard 2.0,您应该安装 Microsoft.Bcl.AsyncInterfaces

https://www.nuget.org/packages/Microsoft.Bcl.AsyncInterfaces/

【讨论】:

请不要只发布一些工具或库作为答案。至少在答案本身中展示how it solves the problem。 因为问题在于缺少成员 IAsyncEnumerable .NET Standard 2.0 - Microsoft 发布此数据包以兼容 .NET Standard 2.0。你不需要做任何事情,只要安装它。【参考方案3】:

弗拉德的答案是正确的。

    将 LangVersion 8.0 添加到所需的 Projects PropertGroup 将 Microsoft.Bcl.AsyncInterfaces 添加为 PackageReference

例如:MyDummyLib.csproj

<PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
    <LangVersion>8.0</LangVersion>
    <AssemblyName>MyDummyLib</AssemblyName>
    <RootNamespace>MyDummyLib</RootNamespace>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
    <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.1" />
</ItemGroup>

【讨论】:

【参考方案4】:

看起来您需要以 .NET Standard 2.1 为目标,但它仍处于预览阶段。

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1?view=netstandard-2.1

【讨论】:

以上是关于C# 8.0 是不是支持 IAsyncEnumerable?的主要内容,如果未能解决你的问题,请参考以下文章

C# 8.0 正式发布:Visual Studio 2019 支持所有新功能

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

如何升级 azure CI 以使用 c# 8.0