Async Await异步调用WebApi
先铺垫一些基础知识
//sync method sample
public static void DownLoadWebPage()
{
//TODO cost 5s
Console.WriteLine( "DownLoadWebPage on Thread:{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
Console.WriteLine( "End downloading the page.." );
} public static void LoadDatafromDB()
{
//TODO cost 5s
Console.WriteLine( "LoadDataFromDB on Thread:{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
Console.WriteLine( "End loading Data.." );
}
public static void OurSyncJob()
{
Console.WriteLine( "start doing things sync" );
DownLoadWebPage();
LoadDatafromDB();
//do some other things
Console.WriteLine( "do some other things" );
}
public static async Task OurAsyncJobTask()
{
Console.WriteLine( "start doing things async" );
var taskA= Task.Run(() => { DownLoadWebPage(); });
var taskB= Task.Run(() => { LoadDatafromDB(); });
await Task.WhenAll(taskA,taskB);
Console.WriteLine( "do some other things" );
}
public class ProductController : ApiController
{
public productRepo repo = new productRepo();
public IEnumerable< Product> getProducts()
{
Thread.Sleep();
return repo.GetAll();
}
}
public class WidgetController : ApiController
{
public widgetRepo repo = new widgetRepo();
public IEnumerable< Widget> getWidgets()
{
Thread.Sleep();
return repo.GetAll();
}
}
public static List <Product > TaskGetProduct()
{
using( HttpClient client= new HttpClient())
{
client.BaseAddress = new Uri( "http://localhost:52593/" );
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue ("application/json" ));
string json = client.GetString("api/Product/Products" );
return JsonConvert.DeserializeObject< List< Product>>(json);
}
}
public static async Task< List< Product>> TaskGetProduct()
{
using( HttpClient client= new HttpClient())
{
client.BaseAddress = new Uri( "http://localhost:52593/" );
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue ("application/json" ));
string json = await client.GetStringAsync("api/Product/Products" );
return JsonConvert.DeserializeObject< List< Product>>(json);
}
} public static async Task< pwgVM> RunTaskGetAll()
{
var task1 = TaskGetItem< Product>();
var task2 = TaskGetItem< Gizmos>();
var task3 = TaskGetItem< Widget>();
await Task.WhenAll(task1,task2,task3);
pwgVM vm = new pwgVM(task1.Result,task2.Result,task3.Result);
return vm;
}

Async Await异步调用WebApi的更多相关文章
- .NET Web应用中为什么要使用async/await异步编程
前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...
- 【转】C# Async/Await 异步编程中的最佳做法
Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...
- 将 async/await 异步代码转换为安全的不会死锁的同步代码
在 async/await 异步模型(即 TAP Task-based Asynchronous Pattern)出现以前,有大量的同步代码存在于代码库中,以至于这些代码全部迁移到 async/awa ...
- C#中 Thread,Task,Async/Await 异步编程
什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调 ...
- spring boot中使用@Async实现异步调用任务
本篇文章主要介绍了spring boot中使用@Async实现异步调用任务,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 什么是“异步调用”? “异步调用”对应的是“同步 ...
- async/await异步处理demo
async/await异步处理demo 下载地址: async/await异步处理demo
- spring boot 学习(十一)使用@Async实现异步调用
使用@Async实现异步调用 什么是”异步调用”与”同步调用” “同步调用”就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行:”异步调用”则是只要上一行代码执行,无需等 ...
- Spring Boot使用@Async实现异步调用
原文:http://blog.csdn.net/a286352250/article/details/53157822 项目GitHub地址 : https://github.com/FrameRes ...
- 深入理解协程(四):async/await异步爬虫实战
本文目录: 同步方式爬取博客标题 async/await异步爬取博客标题 本片为深入理解协程系列文章的补充. 你将会在从本文中了解到:async/await如何运用的实际的爬虫中. 案例 从CSDN上 ...
随机推荐
- AJPFX平台:外汇的基本面分析
AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...
- diamond的设计思路
diamond主要包含四个包:diamond-client.diamond-sdk.diamond-server和diamond-util client就非常简单的进行http的调用server拿数据 ...
- UI的设计,适配器,以及RecyclerView无法加载的解决办法
这本书里讲到的界面设计都是用最基本的方式实现的,即编写xml文件 所有的控件都具有宽度和高度属性,即android:layout_width和android:layout_height,这两个属性对应 ...
- [转]Express框架
http://javascript.ruanyifeng.com/nodejs/express.html
- C#:时间日期操作(持续更新)
1.给定时间戳返回指定的时间格式 private string StampToDate(string timeStamp,string format) { DateTime dtStart = Tim ...
- keytool和openssl生成的证书转换
keytool和openssl生成的证书转换 keytool生成证书示例 生成私钥+证书: keytool -genkey -alias client -keysize 2048 -validity ...
- Grape教程-params
参数 请求参数可以通过params获取,params是一个hash对象,包括GET.POST.PUT参数,以及路径字符串中的任何命名参数: get :public_timeline do Status ...
- 读书笔记(04) - 错误监控 - JavaScript高级程序设计
错误类型 即时运行错误 (代码错误) 资源加载错误 常见的错误 1. 类型转换错误 建议使用全等===操作符 2.数据类型错误 建议加强类型判断 // 数组倒序 function reverseSor ...
- js获取上一个兄弟元素
需要用到的两个属性:previousSbiling和previousElementSibling previousSibling:获取元素的上一个兄弟节点:(既包含元素节点.文本节点.注释节点) pr ...
- Spring Security OAuth2实现单点登录
1.概述 在本教程中,我们将讨论如何使用 Spring Security OAuth 和 Spring Boot 实现 SSO(单点登录). 本示例将使用到三个独立应用 一个授权服务器(中央认证机制) ...