如何在旧版本的 .NET Core / Framework 中使用 C# 8 的异步流(IAsyncDisposable / IAsyncEnumerable / IAsyncEnumerator)

C# 8.0 为我们带来了异步流,可以使用 async foreach,不过使用此语法需要 IAsyncEnumerable / IAsyncEnumerator 类型。本文介绍如何在旧版本的 .NET Framework 和旧版本的 .NET Core 中获得此类型。

本文内容
异步流所需版本
安装 Microsoft.Bcl.AsyncInterfaces
使用异步流
定义支持异步流的方法
使用 await foreach
额外说明
异步流所需版本
异步流需要 .NET Core 3.0 及以上版本才能直接支持。而如果是 .NET Framework,则是任何版本都不直接支持。

如果需要在早期版本使用异步流,需要安装 Microsoft.Bcl.AsyncInterfaces 这个 NuGet 包。这就像在早期版本中使用 ValueTuple 需要安装 System.ValueTuple 一样。

安装 Microsoft.Bcl.AsyncInterfaces
需要先在你的项目中安装 NuGet 包:

Microsoft.Bcl.AsyncInterfaces

<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" />
1
安装此包之后,即可在你的项目当中开启异步流的支持。

一点说明:异步流中使用到了 ValueTask,此类型需要 System.Threading.Tasks.Extensions 包的支持。在 .NET Framework 4.8 以下会自动额外引入此包。

使用异步流
定义支持异步流的方法
private async IAsyncEnumerable<string> EnumerateTestsAsync()
{
    for (var i = 0; i < 3; i++)
    {
        await Task.Delay(100).ConfigureAwait(false);
        yield return $"欢迎访问吕毅的博客,第 {i} 页";
    }
}
使用 await foreach
直接使用 await foreach 即可使用 C# 8.0 带来的异步流。

var verify = 0;
await foreach (var i in EnumerateTestsAsync())
{
    Assert.AreEqual(verify, i);
    verify++;
}
Assert.AreEqual(3, verify);
额外说明
记得如果你在 .NET Framework 4.8 或以下版本,.NET Core 3.0 以下版本编写代码时,自动启用的 C# 语言版本是 7.3,所以你需要额外为你的项目启用 C# 8.0 才行。

<LangVersion>latest</LangVersion>
1
另外,由于 ValueTask 要求的最低 .NET Framework 版本为 4.5.2,所以如果使用更低版本的 .NET Framework,将无法使用异步流。

参考资料

Async streams - C# 8.0 specification proposals - Microsoft Docs
Using async disposable and async enumerable in frameworks older than .NET Core 3.0 - StrathWeb. A free flowing web tech monologue.
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Framework是一个由Microsoft开发的软件框架,用于在Windows操作系统上运行和开发应用程序。它提供了一系列的类库、语言服务、运行时环境和开发工具,使得开发人员能够快速、高效地开发Windows应用程序。 .NET Framework的不同版本提供了不同的功能和更新,以下是各个版本的解释: 1. .NET Framework 1.0:这是第一个版本的.NET Framework,于2002年发布。它提供了基本的类库和语言服务,支持Visual Basic .NETC#等编程语言。 2. .NET Framework 1.1:于2003年发布,是.NET Framework 1.0的升级版本。它增加了对ASP.NET Mobile控件的支持,对ASP.NET的性能进行了优化,并增加了安全性和稳定性方面的改进。 3. .NET Framework 2.0:于2005年发布,是.NET Framework的一个重要版本。它引入了新的类库、语言服务和开发工具,支持Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)和Windows Workflow Foundation(WF)等技术。 4. .NET Framework 3.0:于2006年发布,是.NET Framework 2.0的升级版本。它不是一个全新的版本,而是在.NET Framework 2.0的基础上添加了WPF、WCF和WF等技术。 5. .NET Framework 3.5:于2007年发布,是.NET Framework的一个重要版本。它增加了对LINQ、ASP.NET AJAX和.NET Compact Framework等技术的支持,同时还提供了一些新的类库和语言服务。 6. .NET Framework 4.0:于2010年发布,是.NET Framework的一个主要版本。它增加了对并行编程、动态语言运行时、COM互操作和安全性等方面的支持,同时还提供了一些新的类库和语言服务。 7. .NET Framework 4.5:于2012年发布,是.NET Framework的一个升级版本。它增加了对异步编程、WebSocket、Web API和HTML5等技术的支持,同时还提供了一些新的类库和语言服务。 8. .NET Framework 4.6:于2015年发布,是.NET Framework的一个升级版本。它增加了对ASP.NET Identity、ASP.NET Web API和ASP.NET MVC等技术的支持,同时还提供了一些新的类库和语言服务。 9. .NET Framework 4.7:于2017年发布,是.NET Framework的一个升级版本。它增加了对Windows 10 Creators Update和ASP.NET Core 2.0等新技术的支持,同时还提供了一些新的类库和语言服务。 总之,不同版本的.NET Framework提供了不同的功能和更新,根据实际需求选择相应版本是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值