C# 转换异步模式

软谋的.NET全套架构视频,大多视频包含源码,录制时间(初中级是2019~2020高级架构是2020~2021),原价6499,现仅需299元。这个活动周三推出后,受到热捧,仅一个技术群就几十人抢购!最后几天活动,目录和介绍:点击下方超链接查看

太牛了!三天时间几百人加我咨询这份.NET架构视频

需要的加微zls20210502,进技术群的加微mm1552923,备注进群

f32854aa5e607ad6e639e74c5501b62b.png

并非 .NET Framework 的所有类都引入了新的异步方法。在使用框架中的不同类时会发现,还有许多类只提供了 BeginXXX 方法和 EndXXX 方法的异步模式,没有提供基于任务的异步模式。但是,可以把异步模式转换为基于任务的异步模式。

这个示例使用 HttpWebRequest 类和 BeginGetResponse 方法将该方法转换为基于任务的异步模式。Task.Factory.FromAsync 是一个泛型方法,它提供了一些重载版本,将异步模式转换为基于任务的异步模式。对于示例应用程序,当调用 HttpWebRequest 的 BeginGetResponse 方法时,将发出异步网络请求。这个方法返回一个 IAsyncResult,它是 FromAsync 方法的第一个参数。第二个参数是对 EndGetResponse 方法的引用,它需要一个带有 IAsyncResult 参数(即 End GetResponse 方法)的委托。第二个参数还需要返回 WebResponse,由 FromAsync 方法的泛型参数决定。当 IAsyncResult 信号完成时,任务助手功能会调用 EndGetResponse 方法:

private static async void ConvertingAsyncPattern()
{
  HttpWebRequest request = WebRequest.Create("http://www.microsoft.com")
    as HttpWebRequest;
  using (WebResponse response = await Task.Factory.FromAsync<WebResponse>(
    request.BeginGetResponse(null, null), request.EndGetResponse))
  {
    Stream stream = response.GetResponseStream(); 
    using (var reader = new StreamReader(stream))
    {
      string content = reader.ReadToEnd();
      Console.WriteLine(content.Substring(0,100));
    }
  }
}

警告

在旧应用程序中,通常在使用异步模式时使用委托的 BeginInvoke() 方法。在 .NET Core 应用程序中使用此方法时,编译器不会报错。但是,在运行时,将抛出一个平台不支持的异常。

往期推荐

·  C# 数据流

·  C# 类型系统

·  C# 面向对象的编程

·  C# 执行 SQL 语句

·  C# 连接数据库

·  C# 迭代器

017cdd2e928f6270e684b8c5b8e2ac41.png

Love life,love yourself

关注小编不迷路呦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值