并非 .NET Framework 的所有类都引入了新的异步方法。在使用框架中的不同类时会发现,还有许多类只提供了 BeginXXX 方法和 EndXXX 方法的异步模式,没有提供基于任务的异步模式。但是,可以把异步模式转换为基于任务的异步模式。
这个示例使用 HttpWebRequest 类和 BeginGetResponse 方法将该方法转换为基于任务的异步模式。Task.Factory.FromAsync 是一个泛型方法,它提供了一些重载版本,将异步模式转换为基于任务的异步模式。对于示例应用程序,当调用 HttpWebRequest 的 BeginGetResponse 方法时,将发出异步网络请求。这个方法返回一个 IAsyncResult,它是 FromAsync 方法的第一个参数。第二个参数是对 EndGetResponse 方法的引用,它需要一个带有 IAsyncResult 参数(即 End GetResponse 方法)的委托。第二个参数还需要返回 WebResponse,由 FromAsync 方法的泛型参数决定。当 IAsyncResult 信号完成时,任务助手功能会调用 EndGetResponse 方法:
警告
在旧应用程序中,通常在使用异步模式时使用委托的 BeginInvoke() 方法。在 .NET Core 应用程序中使用此方法时,编译器不会报错。但是,在运行时,将抛出一个平台不支持的异常。
领取专属 10元无门槛券
私享最新 技术干货