亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

解決 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死鎖問題

2024-07-10 13:31:25
字體:
來源:轉載
供稿:網友

在我們將站點從 ASP.NET + Windows 遷移至 ASP.NET Core + Linux 的過程中,目前遇到的最大障礙就是 —— 沒有可用的支持 .NET Core 的 memcached 客戶端。

我們一直用的是 EnyimMemcached ,在沒有其它選擇的情況下,我們自己嘗試著將 EnyimMemcached 遷移至 .NET Core。。?;?.NET Core 修改好了代碼,在開發環境下測試通過,在 Linux 服務器上自己訪問很正常(沒有并發訪問量),但是只要接入一定的訪問量就會發生死鎖(deadlock),瀏覽器請求卡死。

這個問題困擾了我們很長時間,昨天才定位到是發生在將 memcached 服務器名稱解析為 IP 地址的時候。

var addresses = System.Net.Dns.GetHostAddressesAsync(host).Result;

這是我們在將 EnyimMemcached 遷移至 .NET Core 時修改過的代碼,之前調用的是同步方法:

var addresses = System.Net.Dns.GetHostEntry(host);

由于在 .NET Core Framework 的 System.Net.Dns 中沒有同步方法,只有異步方法,所以我們只能這樣調用異步方法。

看到上面的代碼,你也許會詫異:怎么用 .Result ,為什么不用 await ?不死鎖才怪呢。。。

你的詫異非常正確。我們也深知 .Result 的危害,在平時的代碼中堅決不用。但當時在修改 EnyimMemcached 的代碼時,由于這個方法是在 MemcachedClient 的構造函數中調用的,沒法改為 await 調用,被迫用了 .Result ,然后又把這個地方的修改給忘了。。。昨天才剛剛發現,立馬意識到罪魁禍首非常有可能就是這里的 .Result ,于是以此為突破口,想盡一切辦法實現在同步方法中調用異步辦法,并且在博問中尋求支援 —— 在同步方法中調用異步方法時如何避免死鎖問題 。

結果,用盡一切能想到與能找到的同步方法調用異步方法的方法,都沒能解決死鎖問題。如果實在找不到解決方法,我們準備采用最后一招也是最丑陋的一招 —— 不用 Dns.GetHostAddressesAsync() ,用 ProcessStartInfo 調用命令行命令解析 IP ,比如在 Linux 上用 getent hosts 主機名 。

在準備放棄之前,今天又想了想還有哪些可能帶來線索的地方漏掉了呢?突然想到有個重要地方竟然忘了,還沒看 Dns.GetHostAddressesAsync() 的源代碼實現。雖然不報太大希望,不就是個異步方法嗎,但還是要看一下。

于是從 github 上簽出 corefx 的源代碼,打開 Dns.GetHostAddressesAsync() 源代碼一看,感覺有點怪怪的,怎么用了 Task.Factory.FromAsync() ?

public static Task<IPAddress[]> GetHostAddressesAsync(string hostNameOrAddress){  NameResolutionPal.EnsureSocketsAreInitialized();  return Task<IPAddress[]>.Factory.FromAsync(    (arg, requestCallback, stateObject) => BeginGetHostAddresses(arg, requestCallback, stateObject),    asyncResult => EndGetHostAddresses(asyncResult),    hostNameOrAddress,    null);}

開始沒反應過來,只是把這段代碼貼到博問的補充問題中,在貼完后突然反應過來了,咦,怎么沒有 async 關鍵字?方法名最后是 Async,我們一直以為是 async 方法,而且絲毫沒有懷疑過。。。

沒有 async ,只是返回參數是 Task 類型,那在同步方法中調用完全沒問題,只要在訪問 .Result 之前調用一下 .Wait() 方法就行了,于是改為下面的代碼:

Task<IPAddress[]> task = System.Net.Dns.GetHostAddressesAsync(host);task.Wait();var addresses = task.Result;

死鎖問題立馬解決!

方法名以 Async 結尾,卻不是 async 方法,當時的感想就是 —— 你的眼睛背叛你的心。如果不是我自己的誤解(只要以 Async 結尾,就應該是 async 方法),那就是一種流氓行為,就如 HttpClient 的流氓 —— 實現了 IDispose 接口,卻沒真正 Dispose 。

不管怎么樣,這個影響我們遷移至 .NET Core 的最大障礙終于消除了,值得慶祝!

支持 .NET Core 的 EnyimMemcached 的代碼還需要一些修改與完善,等修改好了,我們會把源代碼與 NuGet 包都發布出來。

通過此文希望能幫助到你解決這種問題,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91香蕉亚洲精品| 久久国产精品99国产精| 精品国产欧美一区二区三区成人| 国产一区二区日韩| 国产亚洲精品综合一区91| 日韩黄色在线免费观看| 亚洲999一在线观看www| 丰满岳妇乱一区二区三区| 97精品在线观看| 亚洲深夜福利网站| 亚洲免费av网址| 亚洲综合色激情五月| 国产香蕉97碰碰久久人人| 俺去亚洲欧洲欧美日韩| 久久免费观看视频| 亚洲欧美日韩网| 日韩二区三区在线| 国产91亚洲精品| 最近2019中文字幕大全第二页| 日韩精品免费看| 国产aⅴ夜夜欢一区二区三区| 97香蕉久久超级碰碰高清版| 成人一区二区电影| 青青草一区二区| 国产精品r级在线| 日韩在线视频观看| 日韩精品在线影院| 69久久夜色精品国产69| 久久久久久成人| 国产成人精品视频在线观看| 久久69精品久久久久久国产越南| 久久精品中文字幕电影| 亚洲欧美中文在线视频| 国产精品无码专区在线观看| 中文字幕久热精品在线视频| 国产精品一区二区三区免费视频| 国内精品久久久久久| 国产精品一区二区av影院萌芽| 亚洲成色777777在线观看影院| 国产日产亚洲精品| 国产日韩欧美日韩大片| 国产亚洲激情视频在线| 九九热精品在线| 日韩电影免费观看在线| 国产在线久久久| 日韩在线播放一区| 欧美午夜电影在线| 精品久久久精品| 在线视频欧美日韩精品| 九九热精品视频在线播放| 在线视频中文亚洲| 欧美在线xxx| 国产美女被下药99| 久久综合亚洲社区| 亚洲成av人影院在线观看| 欧美日韩亚洲激情| 精品中文字幕视频| 92看片淫黄大片欧美看国产片| 久久精品99国产精品酒店日本| 一区二区三区无码高清视频| 午夜精品久久久久久99热| 91免费精品国偷自产在线| 久久精品国产一区| 国产中文字幕91| 欧美日韩国产精品专区| 97视频在线观看成人| 97精品伊人久久久大香线蕉| 91九色国产社区在线观看| 精品国模在线视频| 国产精品免费视频xxxx| 国产精品欧美日韩| 欧美日韩在线视频一区| 欧美一二三视频| 午夜欧美不卡精品aaaaa| 国产精品2018| 欧美三级欧美成人高清www| 日韩电影中文字幕在线| 爽爽爽爽爽爽爽成人免费观看| 91亚洲国产精品| 久久天天躁狠狠躁夜夜av| 国产成人自拍视频在线观看| 91中文字幕在线观看| 亚洲无亚洲人成网站77777| 久久免费福利视频| 国内精久久久久久久久久人| 国产精品日韩在线观看| 精品视频在线播放| 欧美日韩成人黄色| 日韩在线观看免费高清完整版| 欧美电影在线观看高清| 亚洲成av人片在线观看香蕉| 国产午夜精品理论片a级探花| 久久精品中文字幕| 中文字幕亚洲激情| 亚洲图片在线综合| 日本久久久久久久久久久| 国产成人精品久久二区二区91| 日韩电影免费在线观看中文字幕| 欧美有码在线视频| 91高潮精品免费porn| 亚洲bt欧美bt日本bt| 欧美国产日韩中文字幕在线| 97免费在线视频| 久久久久久成人| 欧美日韩xxx| 成人激情免费在线| 欧美一区二区色| 精品国偷自产在线视频| 国产精品69久久久久| 久久理论片午夜琪琪电影网| 久久深夜福利免费观看| 97精品国产91久久久久久| 色噜噜亚洲精品中文字幕| 91综合免费在线| 在线日韩日本国产亚洲| 国产一区二区美女视频| 欧美在线视频一区| 日韩精品视频在线观看网址| 日韩电影免费在线观看| 欧美日韩在线视频一区| 久久亚洲精品中文字幕冲田杏梨| 91九色蝌蚪国产| 91av视频在线观看| 欧美大尺度激情区在线播放| 国产偷国产偷亚洲清高网站| 成人国产在线视频| 精品在线欧美视频| 91在线免费看网站| 国产精品日日做人人爱| 亚洲色图偷窥自拍| 欧美伊久线香蕉线新在线| 欧美黄色性视频| 亚洲精品久久久久中文字幕二区| 亚洲综合自拍一区| 国产+人+亚洲| 亚洲视频在线观看网站| 日韩免费看的电影电视剧大全| 国外色69视频在线观看| 精品国产一区二区在线| 亚洲欧美日韩成人| 91国内揄拍国内精品对白| 色中色综合影院手机版在线观看| 亚洲综合色av| 亚洲黄色在线观看| 欧美性20hd另类| 欧美日本亚洲视频| 亚洲国产精品99久久| 中文字幕亚洲欧美| 中文字幕精品影院| 日韩在线小视频| 亚洲综合精品一区二区| 精品国产91久久久| 777777777亚洲妇女| 日本久久久久久久久久久| 欧美成人精品影院| 欧美高清视频在线| 91免费在线视频网站| 国产99久久精品一区二区 夜夜躁日日躁| 在线电影欧美日韩一区二区私密| 精品欧美一区二区三区| 国产精品美女www| 少妇高潮久久久久久潘金莲| 成人激情视频在线播放| 久久久久久久网站|