c# 异步编程(async + await + HttpClient)
来源:互联网 发布:原始传奇光翼进阶数据 编辑:程序博客网 时间:2024/05/22 05:29
前沿
WPF应用中,有时需要从网络获取数据,由于网络原因这个过程会耗时很久。为了防止UI界面不卡死,需要进行异步编程。c#中HttpClient可以很好的进行异步网络请求。但是其中存在一个问题,HttpClient的请求都是异步的,应该如何进行同步调用呢?
知识准备
- C# 中的 Async 和 Await 关键字是异步编程的核心。使用 async 和 await 定义的异步方法简称为“异步 (Async) 方法”。
- async 和 await 关键字不会创建其他线程。
- 异步方法不等同于多线程。
- 按照约定,异步方法的名称以“Async”后缀结尾。
- 异步方法返回类型:
- 如果你的方法有操作数为 TResult 类型的返回语句,则为
Task<TResult>
。 - 如果你的方法没有返回语句或具有没有操作数的返回语句,则为 Task。
- 如果你的方法有操作数为 TResult 类型的返回语句,则为
- await 可以将当前方法挂起,执行线程切换到异步方法的调用方。
示例代码
class Program { static void Main(string[] args) { Method1(); Method2(); Method3(); Console.ReadKey(); } private async static Task MethodAsync() { Console.WriteLine("enter MethodAsync"); await Task.Run(()=> { Thread.Sleep(3000); }); Console.WriteLine("quit MethodAsync"); } static void Method1() { Console.WriteLine("Method1"); } static async void Method2() { Console.WriteLine("enter Method2"); await MethodAsync(); Console.WriteLine("quit Method2"); } private static void Method3() { Console.WriteLine("Method3"); } }
执行结果:
本示例展示了异步方法的调用和以同步的方式调用异步方法(听起来有点怪,既然要以同步方法调用异步方法,为何不直接调用同步方法代替使用异步方法)。
- 定义一个MethodAsync异步方法。
- Method2()依赖于MethodAsync的返回,必须等MethodAsync执行完毕才能返回Method2()。
- 在Method2()使用await强制表示了Method2()依赖于MethodAsync的返回。
- 需要说明的是,只有在异步方法中才能使用await同步调用另一个异步方法。
HttpClient的同步调用
将上例中的MethodAsync()当成HttpClient的异步请求方法即可。
阅读全文
0 0
- c# 异步编程(async + await + HttpClient)
- C#异步编程async await
- C# 异步编程:async和await (2)
- C# Async/await 异步多线程编程
- C#异步编程之async、await
- 初识C#异步编程Task,await,async
- C#异步编程和await/async
- async/await 异步编程
- async/await异步编程
- c# async/await编程
- Async和await异步编程
- Python异步编程Async/Await
- 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)
- C#异步编程之(三):深入 Async 和 Await 的实现及其成本
- c# async、await的使用,异步方法
- C#中的异步:async和await
- C#中的异步:async和await
- C#中的异步:async和await
- linux下用tomcat部署java web
- 服务器部署
- Butter Knife框架的基本使用
- idea远程调试Linux上的Tomcat代码
- POJ
- c# 异步编程(async + await + HttpClient)
- hdu 1875 Prim
- 响应式头部
- QML的Window与ApplicationWindow
- 使用Apache的虚拟主机以及代理搞定多个网站的子域名(包括跨域情况)解析问题
- Android将图上以base64编码的格式上传到node.js服务器并保存
- Hive SQL基础操作
- JQuery 插件6
- Win10如何搭建FTP服务器以实现快速传输文件?