c# – 从异步编程模型(APM)迁移到基于任务的异步模式(TAP)

c# – 从异步编程模型(APM)迁移到基于任务的异步模式(TAP),第1张

概述.NET中有许多类使用旧的 Asynchronous Programming Model (APM),“不再推荐用于新开发”. APM使用Begin / End方法对,End方法将 IAsyncResult对象作为参数.一个这样的类是 TcpClient,您可以使用它来异步连接,如下所示: private void SomeMethod(){ this.tcpClient = new T .NET中有许多类使用旧的 Asynchronous Programming Model (APM),“不再推荐用于新开发”. APM使用Begin / End方法对,End方法将 IAsyncResult对象作为参数.一个这样的类是 TcpClient,您可以使用它来异步连接,如下所示:
private voID SomeMethod(){    this.tcpClIEnt = new TcpClIEnt();    IAsyncResult result = this.tcpClIEnt.BeginConnect(ip,port,EndConnect,null);}private voID EndConnect(IAsyncResult asyncResult){    this.tcpClIEnt.EndConnect(asyncResult);    // ... do stuff ...}

Task-based Asynchronous Pattern (TAP)是一种更现代的异步编程形式,通过使用async和await关键字来促进.

因此,如果您有一个类似TcpClIEnt的类,它使用APM模型并且不公开任何任务,那么如何将其异步方法适配到TAP以便它们可以与async / await一起使用?

解决方法 这是 in the documentation you linked to.

作为一般规则,您应首先查看或询问是否有直接支持TAP的更新API.几乎所有的BCL类都已经更新以支持TAP,并且少数(例如httpWebRequest)已被替换为TAP替代(例如,httpClIEnt).在这种情况下,没有TAP TcpClIEnt等价物,所以包装它们是你最好的选择.

如果您通过APM包装器编写TAP,我建议使用简单的扩展方法:

public static Task ConnectTaskAsync(this TcpClIEnt clIEnt,IPAddress address,int port){  return Task.Factory.FromAsync(clIEnt.BeginConnect,clIEnt.EndConnect,address,null);}

这为您提供了一种使用它们的自然方式,并将您的“互 *** 作”代码与包含实际逻辑的任何代码分开:

async Task SomeMethodAsync(){  this.tcpClIEnt = new TcpClIEnt();  await this.tcpClIEnt.ConnectTaskAsync(ip,port);  // ... do stuff ...}
总结

以上是内存溢出为你收集整理的c# – 从异步编程模型(APM)迁移到基于任务的异步模式(TAP)全部内容,希望文章能够帮你解决c# – 从异步编程模型(APM)迁移到基于任务的异步模式(TAP)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1247419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存