日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 异步调用webapi_Async Await异步调用WebApi

發布時間:2025/3/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 异步调用webapi_Async Await异步调用WebApi 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先鋪墊一些基礎知識 在 .net 4.5中出現了 Async Await關鍵字,配合之前版本的Task 來使得開發異步程序更為簡單易控。 ? 在使用它們之前 我們先關心下 為什么要使用它們。好比 一個人做幾件事,那他得一件一件的做完,而如果添加幾個人手一起幫著做 很顯然任務會更快的做好。這就是并行的粗淺含義。 ? 在程序中,常見的性能瓶頸在于 NetWork I/O 瓶頸 , CPU 瓶頸, 數據庫I/O瓶頸,這些瓶頸使得我們的程序運行的很慢,我們想辦法去優化。因為并行開發本身就加重CPU負擔,所以一般將并行用來優化 由另外兩種I/O造成的瓶頸。

//sync method sample

public static void DownLoadWebPage()

{

//TODO cost 5s

Console.WriteLine( "DownLoadWebPage on Thread:{0}", Thread.CurrentThread.ManagedThreadId);

Thread.Sleep(5000);

Console.WriteLine( "End downloading the page.." );

}

public static void LoadDatafromDB()

{

//TODO cost 5s

Console.WriteLine( "LoadDataFromDB on Thread:{0}", Thread.CurrentThread.ManagedThreadId);

Thread.Sleep(5000);

Console.WriteLine( "End loading Data.." );

} 比如這邊的兩個方法, 通過Thread.Sleep來模擬程序耗時5秒,那如果我們再寫一個方法來調用

public static void OurSyncJob()

{

Console.WriteLine( "start doing things sync" );

DownLoadWebPage();

LoadDatafromDB();

//do some other things

Console.WriteLine( "do some other things" );

} 很顯然 會耗時超過10s鐘,如果我們用task開啟兩個線程 同時執行 如下

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" );

} 那執行時間只會是5s多一點, 大大提升了我們程序的性能。 ? 在了解了這些基礎之后,我們來接觸異步程序的實際運用場景。 我們調用 WebApi的時候,因為要經過網絡傳輸,有時候會很慢。 這時候便有了我們用異步一展身手的時候了。 我們的webapi如下

public class ProductController : ApiController

{

public productRepo repo = new productRepo();

public IEnumerable< Product> getProducts()

{

Thread.Sleep(5000);

return repo.GetAll();

}

}

public class WidgetController : ApiController

{

public widgetRepo repo = new widgetRepo();

public IEnumerable< Widget> getWidgets()

{

Thread.Sleep(5000);

return repo.GetAll();

}

} 都是模擬耗時5秒鐘,現在要同時調用這些api獲得 數據并一起展示

public static List 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);

}

} 很顯然 調用這個webapi要5秒多,那么我們要同時獲取的時候,就要分別調用TaskGetProduct()?TaskGetWidget()?TaskGetGizmos() 和前面的經驗一樣,這要是同步的話不得15秒多。。這要如何忍受。。 很顯然要異步獲取

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;

} 三個任務同時進行,花費5秒多。ok

? ?附上源代碼? http://files.cnblogs.com/files/JasonShenW/WebApi.rar http://files.cnblogs.com/files/JasonShenW/WebMVC.rar

總結

以上是生活随笔為你收集整理的java 异步调用webapi_Async Await异步调用WebApi的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品久久精品 | 极品少妇av | 北条麻妃一区二区三区四区五区 | 永久免费av在线 | 91视频看片 | 欧美激情精品 | 日韩大胆视频 | 一本久久综合亚洲鲁鲁五月天 | 精品色哟哟| 高潮毛片又色又爽免费 | 99热只有这里有精品 | 日韩专区在线观看 | 午夜爽爽影院 | 久久久久久久国产精品美女 | 哺乳期喷奶水丰满少妇 | 精产国品一二三区 | 国产欧美精品一区二区在线播放 | 疯狂做爰高潮videossex | 99ri在线| 人妻少妇被粗大爽9797pw | 午夜视频在线观看视频 | 日韩中文字幕在线免费观看 | 先锋影音av在线 | 美日韩丰满少妇在线观看 | a v在线视频 | 狠狠操夜夜操 | 毛片网页| 亚洲国产电影在线观看 | 另类视频一区 | 日老女人视频 | 久久久精| 嫩草嫩草嫩草嫩草嫩草嫩草 | 可以免费看的av毛片 | 91超级碰 | 久久久久久免费毛片精品 | 国产一区二区精彩视频 | 久久avav| 曰本无码人妻丰满熟妇啪啪 | 91福利专区| av综合导航| 日本一区二区在线免费 | 欧美日本一二三区 | 蜜臀av在线观看 | 国产做爰视频免费播放 | 久久中文字幕精品 | 人人澡人人干 | 久久精品视频一区二区 | 国产亚洲无码精品 | 成人手机在线视频 | 草草影院网址 | 色姑娘综合网 | 久久精品天堂 | 肉丝肉足丝袜一区二区三区 | 国产高清在线免费观看 | www.爆操 | 久久精品国产99久久 | 日韩成人精品在线观看 | 精品欧美黑人一区二区三区 | 日本一区二区免费电影 | 色视屏| 色婷婷av国产精品 | 欧美日韩一卡 | 一道本在线观看 | 性猛交xxxx乱大交孕妇2十 | 日韩特级毛片 | 老女人毛片 | 日韩欧美中文字幕在线视频 | 国产又粗又硬 | 伊人二区 | 医生强烈淫药h调教小说视频 | 超碰女人| 四虎影视库 | 午夜在线精品偷拍 | 草莓视频在线观看入口w | 91婷婷在线| 亚洲精品久久一区二区三区777 | www.亚洲高清 | 91精品美女| 波多野结衣人妻 | 黄色免费91| 久久免费在线 | 天天色av| 中文字幕在线字幕中文 | 亚洲免费黄色片 | 久久午夜网站 | 国产91av在线 | 精品动漫3d一区二区三区免费版 | 色屁屁一区二区三区 | 成人xxxx | 涩涩视频免费 | 风间ゆみ大战黑人 | 日色视频| 三级爱爱 | 神马午夜av | 亚洲精品一级 | 久久精品国产一区二区电影 | 亚洲免费在线视频 | 2019最新中文字幕 | 日本免费网站在线观看 |