在学习Web API的基础课程 Calling a Web API From a .NET Client (C#) 中,作者介绍了如何客户端调用WEB API,并给了示例代码。

但是,那些代码并不是非阻塞调用,作者还说下一章节会介绍异步调用这些方法的正确方法(I'll show the correct way to invoke those methods asynchronously).

可是我再也没找到下文……

这里有篇参考译文:http://www.cnblogs.com/r01cn/archive/2012/11/20/2779011.html

但是楼主也没有回答楼下小伙伴的问题——异步非阻塞调用webapi(后来我给回答了,(*^__^*) 嘻嘻……)

基于以上原因,我在这里做个demo

其实就是将原文中的代码:(参考代码,仅作说明)

 class Program
{
static void Main()
{
RunAsync().Wait();
} static async Task RunAsync()
{
using (var client = new HttpClient())
{
// TODO - Send HTTP requests
}
}
}

改为如下:

 class Program
{
static void Main()
{
RunAsync();
} static async RunAsync()
{
using (var client = new HttpClient())
{
// TODO - Send HTTP requests
}
}
}

即不返回Tast了。

那阻塞跟非阻塞的区别在哪呢?

 HttpResponseMessage response = await client.GetAsync("api/products/2");//非阻塞
//HttpResponseMessage response = client.GetAsync("api/products/2").Result; //阻塞

通过上面的代码可以看出:采用Result属性的过程是线程阻塞的。

示例代码

最新文章

  1. LeetCode:3Sum_15
  2. 避坑宝典:如何选择HTML5游戏引擎
  3. 控件(文本类): TextBlock
  4. jQuery ajax同步的替换方法,使用 $.Deferred()对象
  5. css部分的复习
  6. Skyline TerraExplorer Pro(等ActiveX控件)在Google Chrome浏览器的运行方法
  7. SqlServer里DateTime转字符串
  8. 微信小程序大全(下)(最新整理 建议收藏)
  9. Linux入门之常用命令(12)用户管理
  10. intellij IDEA配置Tomcat
  11. 【从零开始自制CPU之学习篇05】总线
  12. Java就业班day09_xml&tomcat
  13. Android利用Intent与其他应用交互
  14. RestTemplate 服务名请求
  15. handlebars.js 自定义helper(过滤)
  16. Java多线程:CAS与java.util.concurrent.atomic
  17. CentOS7(linux) 通过服务名查询安装目录
  18. KADEMLIA算法学习
  19. 《编程之美》practice
  20. python 将元组解析为多个参数

热门文章

  1. java线程一之创建线程、线程池以及多线程运行时间统计
  2. Android中Parcelabel对象的使用和理解
  3. MFC动态创建控件及其消息响应函数
  4. PHP连接Redis操作函数
  5. oracle的SQL语句中的(+)是干什么用的?
  6. Ehcache概念篇
  7. ErrorUnable to tunnel through proxy. Proxy returns HTTP1.1 400 Bad Reques
  8. Qt快速入门学习笔记(画图篇)
  9. 【bzoj4229】选择 离线+LCT
  10. 【bzoj3142】[Hnoi2013]数列 数学