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.0
与EntityframeworkCore
一起使用,它将无法工作,因为以下错误: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?的主要内容,如果未能解决你的问题,请参考以下文章