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上 ...
随机推荐
- nginx,gunicorn常用命令
nginx 启动: 在下载nginx的目录下直接输入nginx回车 停止: nginx -s stop 重启: nginx -s reload 查看当前运行进程: ps -ef | grep ngin ...
- nginx-1.服务器是什么
服务器相信很多电脑爱好者都听过或者了解一些,一般我们很难看到真正的服务器,因为服务器一般均放置在机房重点,闲人一般均是免进的.比如我们每天浏览的网站.玩的游戏等,所有的数据均存在服务器,服务器一般都在 ...
- Weekly Contest 133
1030. Matrix Cells in Distance Order We are given a matrix with R rows and C columns has cells with ...
- C语言实现windows进程遍历
#include <windows.h> #include <tlhelp32.h> //进程快照函数头文件 #include <stdio.h> int main ...
- FileAttributeView出现空指针异常原因分析
问题? Java7新增了关于文件属性信息的一些新特性,通过java.nio.file.*包下面的类可以实现设置或者读取文件的元数据信息(比如最后修改时间,创建时间,文件大小,是否为目录等等).尤其 ...
- Swift5 语言参考(八) 模式
模式表示单个值或复合值的结构.例如,元组的结构是两个元素的逗号分隔列表.因为模式表示值的结构而不是任何一个特定值,所以可以将它们与各种值匹配.例如,模式匹配元组和任何其他两元素元组.除了将模式与值匹配 ...
- 微信小程序自定义组件的使用以及调用自定义组件中的方法
在写小程序的时候,有时候页面的内容过多,逻辑比较复杂,如果全部都写在一个页面的话,会比较繁杂,代码可读性比较差,也不易于后期代码维护,这时候可以把里面某部分功能抽出来,单独封装为一个组件,也就是通常说 ...
- 基于GTK+3 开发远程控制管理软件(C语言实现)系列三 Windows7开发环境搭建
一.介绍与准备 考虑到目标客户端基本都是windows客户端,所以此次开发环境将搭建在windows7下,相关开发工具有Msys2 和 Eclipse For C/C++ Msys2 是msys的升级 ...
- JavaScript初探三
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- [Python 从入门到放弃] 5. 文件与异常(一)
1.文件操作: 文件操作包含读/写 从文件中读取数据 向文件写入数据 Python中内置了open()方法用于文件操作 (更多关于open()BIF介绍 阅读此篇) 基本模板: 1.获取文件对象 2. ...