锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2023-09-20 21:07:01 韩国cas传感器bcl

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


1
安装此包后,您可以在您的项目中打开异步流支持。

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

使用异步流
定义支持异步流的方法
private async IAsyncEnumerable 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 才行。

latest
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/),不得用于商业目的,修改后的作品必须以同样的许可证发表。如果您有任何问题,请联系我。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章