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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AspNetCore应用注意这一点,CTO会对你刮目相看

發布時間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AspNetCore应用注意这一点,CTO会对你刮目相看 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

已經有很多文章記錄了Web程序中采用異步編程的優勢和.Net異步編程的用法, 異步編程雖然不能解決查詢數據庫的瓶頸, 但是利用線程切換,能最大限度的彈性利用工作線程, 提高了web服務的響應能力。

??????????9012年了,再不會異步編程你是真老了?????

?????本文要說的是利用異步編程中的取消機制緩解數據庫的查詢瓶頸,開發者只需在MVC/WebAPI查詢方法體內關注CancellationToken并適時取消異步任務, 這將大大提高應用的響應能力。

頭腦風暴

想象你請求某網站頁面,該頁面正閃著菊花試圖努力綻放(正在加載),最終你忍不了:

① F5刷新

② 轉向其他頁面

③ 點擊瀏覽器“停止”按鈕?

對于Web服務器,用戶快速刷新5次,服務器將被迫接受 5倍的工作量,這是因為即使用戶刷新了瀏覽器(或點擊停止按鈕), 雖然取消了原始瀏覽器請求,但是Web服務器并不Care,仍然按部就班處理進入HTTP pipeline的請求(MVC/WebAPI 中默認行為,②③場景類似)

在異步編程中能向任務發出Cancellation信號,停止web服務器后端查詢行為。在.NET中,這是使用CancellationToken完成的:

  • 取消令牌的實例傳遞到異步任務

  • 異步任務監視令牌,以查看請求是否已經被取消。

  • 如果請求取消,則應停止執行正在執行的操作。.NET中的大多數異步方法將具有接受取消令牌的重載。

tip

本文取消的請求,指的是耗時長的服務端讀取請求(返回數據但不修改數據的查詢),取消已修改數據的請求對于用程序可能不是一個好的選擇:

①?是否真的要因為用戶導航到應用的另一個頁面而取消保存?也許可以,但也可能不會。

② 提高了復雜性,因為數據庫服務器可能需要回滾事務,這是一項昂貴的操作。

AspNetCore實踐

訪問MyReallySlowReport頁面,等待5s,最終他們放棄去了其他頁面:

所有正在進行的請求都將被取消。

P1 監測CancellationToken令牌

MVC/WebAPI能收到取消請求的信號。開發者只需要在Controller Action中添加CancellationToken參數,并在后續行為中監測該取消信號。

public?async?Task<ActionResult>?MyReallySlowReport(CancellationToken?cancellationToken)
{
????List<ReportItem>?items;
????using?(ApplicationDbContext?context?=?new?ApplicationDbContext())
????{
????????items?=?await?context.ReportItems.ToListAsync(cancellationToken);
????}
????return?View(items);
}

上述EF的調用api支持取消異步操作,故很容易取消SQL的查詢行為;對于自定義的長耗時查詢行為,可以使用CancellationToken的原生觸發用法:

public?async?Task<ActionResult>?MyReallySlowReport(CancellationToken?cancellationToken)
{
????List<ReportItem>?items;
????using?(ApplicationDbContext?context?=?new?ApplicationDbContext())
????{
????????items?=?await?context.ReportItems.ToListAsync(cancellationToken);
????}

????foreach?(var?item?in?items)
????{
????????cancellationToken.ThrowIfCancellationRequested();
????????????//?slow?non-cancellable?work
????????????Thread.Sleep(1000);
????}
????return?View(items);
}

P2?處理取消異步操作向上拋出的異常處

Web服務器觸發取消信號,一般會向上會拋出OperationCanceledException或TaskCancellationException,所以為了記錄這種非常規異常,建議采用獨立的ExceptionFilter。

public?class?OperationCancelledExceptionFilter?:?ExceptionFilterAttribute
{
????private?readonly?ILogger?_logger;

????public?OperationCancelledExceptionFilter(ILoggerFactory?loggerFactory)
????{
????????_logger?=?loggerFactory.CreateLogger<OperationCancelledExceptionFilter>();
????}
????public?override?void?OnException(ExceptionContext?context)
????{
????????if(context.Exception?is?OperationCanceledException)
????????{
????????????_logger.LogInformation("Request?was?cancelled");
????????????context.ExceptionHandled?=?true;
????????????context.Result?=?new?StatusCodeResult(400);
????????}
????}
}

P3?想要得到CTO的大拇指,繼續思考吧

以上是后端程序員利用取消機制緩解異步查詢瓶頸的操作,從web應用全流程角度思考,這個優化還能提升嗎??????

> 以上是傳統的網頁請求場景,在取消請求時,瀏覽器幫助我們發起了Cancellation信號。

>?想想日益常見的SPA程序(單頁面程序),絕大部分頁面請求都是Ajax請求,你點擊應用的另外一個“頁面”(JS代碼維護頁面導航),瀏覽器不會自動取消請求。所以在SPA應用中要前端自己發出取消請求的信號:

var?xhr?=?$.get("/api/myslowreport",?function(data){
??//show?the?data
});

//If?the?user?navigates?away?from?this?page
xhr.abort()

前后端程序猿通力配合,應用的吞吐量和響應能力極大提升,CTO要給各位加薪了。

總結

以上是生活随笔為你收集整理的AspNetCore应用注意这一点,CTO会对你刮目相看的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 东京热无码av一区二区 | 一区二区三区少妇 | 国产美女一级视频 | 黄色a级片在线观看 | 久久中文一区 | 国产精品人成在线观看免费 | 一区不卡在线 | 久久草视频在线 | 亚洲视频1区 | 九久久 | 欧美成人h版 | 大牛影视剧免费播放在线 | 夜夜嗨视频 | 日皮在线观看 | 欧美性猛交xx | 少妇一区二区三区四区 | 日韩免费观看一区二区三区 | 性欧美bb | 男人激烈吮乳吃奶爽文 | 中文字幕在线观看网址 | 美女色诱男人激情视频 | 窝窝视频在线 | 色拍拍视频 | 久久久久国产精品一区二区 | 欧美大尺度床戏做爰 | 97狠狠干| 激情六月综合 | 亚洲高清毛片一区二区 | 黄色片子免费 | 国产三级理论 | 国产传媒一级片 | 91丝袜美腿 | 日韩五码 | 伊人久久大香线蕉 | 麻豆影视免费观看 | 欧美性极品少妇xxxx | 成年性生交大片免费看 | 亚洲永久| 蜜臀久久精品久久久用户群体 | 国产精品18| 男人的天堂a在线 | 色婷婷视频 | 五月婷婷七月丁香 | 色天堂影院 | 嫩草一区二区 | 天天搞夜夜 | 三级免费毛片 | 中文无码精品一区二区三区 | 干干操操| 久久人人插 | 国产夫妇交换聚会群4p | 久久久久国色av免费观看性色 | 天天曰天天操 | 免费看黄av| 亚洲一区二区视频网站 | 亚洲毛片a | 三级黄色在线播放 | 国产一区二区免费在线 | 一区二区视 | 中文字幕av影视 | 久久激情婷婷 | 国产成人精品综合久久久久99 | 国产一区二区91 | 国产精品毛片一区二区三区 | 天天摸日日 | 性欧美videos另类hd | 黄色一几片 | 欧美日本韩国一区二区三区 | 日韩一区电影 | 中国一区二区三区 | 久久精品成人一区二区三区蜜臀 | 电影91久久久 | 黄色精品一区 | 亚洲精品国产欧美 | 91插插插永久免费 | 制服丝袜av电影 | 性xxxx视频播放免费 | 草莓视频在线观看入口w | 久久精品噜噜噜成人 | 日韩视频在线观看一区二区三区 | 色就是色av | 精品国产一区在线观看 | 电家庭影院午夜 | 亚洲色图日韩精品 | 美女视频久久久 | 黄色茄子视频 | 91香蕉视频在线观看免费 | 国内久久久 | 91在线视频 | 黄色一机片 | 日韩免费观看一区二区 | 日韩喷潮 | 午夜看片福利 | 性工作者十日谈 | 国产精品自拍一区 | 亚洲激情视频网 | 成年人在线视频免费观看 | 欧美日韩免费看 | 免费无遮挡无码永久视频 |