上兩篇文章,主要介紹了Thread、ThreadPool和TPL

多線程異步編程示例和實(shí)踐-Thread和ThreadPool

多線程異步編程示例和實(shí)踐-Task

本文中,分享兩則我們?cè)谧龆嗑€程和異步編程中實(shí)際踩過(guò)的坑,實(shí)際生產(chǎn)環(huán)境遇到的問(wèn)題,以及解決辦法。

1. HttpClient

業(yè)務(wù)場(chǎng)景:使用HttpClient實(shí)現(xiàn)第三方業(yè)務(wù)推送,當(dāng)?shù)谌降腍ttp服務(wù)器不通、或者返回很慢時(shí)

  • 線程數(shù)暴漲

  • Asp.Net\Asp.Net MVC場(chǎng)景下,并發(fā)多線程導(dǎo)致的線程阻塞:HttpClient.PostAysnc/GetAsync.Result

第一種線程數(shù)暴漲的問(wèn)題,很容易理解,線程執(zhí)行的慢,線程創(chuàng)建的速度快,一直在執(zhí)行,導(dǎo)致線程不斷創(chuàng)建線程、線程數(shù)不斷暴漲。

根本原因是HttpClient的超時(shí)時(shí)間配置的太長(zhǎng),這點(diǎn)存于業(yè)務(wù)設(shè)計(jì)的問(wèn)題,理論上簡(jiǎn)單請(qǐng)求3s沒(méi)響應(yīng)就該超時(shí)了,復(fù)雜長(zhǎng)時(shí)間請(qǐng)求使用異步任務(wù)(我們的消息應(yīng)用中心)處理。

第二種,Asp.Net或者Asp.Net MVC場(chǎng)景下,使用HttpClient,同時(shí)GetAsync.Result,異步變同步,這就會(huì)出現(xiàn)請(qǐng)求Hang住,線程死鎖、請(qǐng)求沒(méi)響應(yīng)。

根本原因Http異步請(qǐng)求的上下文的互相等待導(dǎo)致的。詳細(xì)分析可以參考下面的link:

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式