精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一句Task.Result就死鎖,這代碼還怎么寫?

開發 前端
大概就是說在 Winform 的主線程下執行 Task.Result 會造成死鎖,我也看了圖中的參考鏈接, Stephen 是絕對的大佬,不過這篇文章對死鎖的成因主要還是大段的文字灌輸,沒有真的讓你眼見為實,那這篇我就從 windbg 的角度來給它剖析下。

 [[398889]]

本文轉載自微信公眾號「一線碼農聊技術」,作者一線碼農聊技術。轉載本文請聯系一線碼農聊技術公眾號。

一、背景

1. 講故事

前些天把 .NET 高級調試 方面的文章索引到 https://github.com/ctripxchuang/dotnetfly 的過程中,發現了一個有意思的評論,截圖如下:

大概就是說在 Winform 的主線程下執行 Task.Result 會造成死鎖,我也看了圖中的參考鏈接, Stephen 是絕對的大佬,不過這篇文章對死鎖的成因主要還是大段的文字灌輸,沒有真的讓你眼見為實,那這篇我就從 windbg 的角度來給它剖析下。

二、windbg 分析

1. 真的會死鎖嗎?

看文章看截圖貌似真的會死鎖,當然我多年不玩 winform 了,也搞不清楚到底會不會,至少在 Console 中是不會的,得,先上一段測試代碼。

  1. public partial class Form1 : Form 
  2.     { 
  3.         public Form1() 
  4.         { 
  5.             InitializeComponent(); 
  6.         } 
  7.  
  8.         private void button1_Click(object sender, EventArgs e) 
  9.         { 
  10.             var jsonTask = GetJsonAsync("http://cnblogs.com").Result; 
  11.             textBox1.Text = jsonTask; 
  12.         } 
  13.  
  14.         public async static Task<string> GetJsonAsync(string uri) 
  15.         { 
  16.             using (var client = new HttpClient()) 
  17.             { 
  18.                 var jsonString = await client.GetStringAsync(uri); 
  19.  
  20.                 return jsonString; 
  21.             } 
  22.         } 
  23.     } 

代碼非常簡單,把程序跑起來,點一下 click,果然界面卡住了,有點不可思議。

2. 尋找死鎖原因

接下來趕緊祭出 windbg 附加到進程上一探究竟吧。

1) 查看主線程

界面無響應了,自然是主線程卡住了,所以急需看一下此時的主線程在干嘛?用命令 ~0s + !clrstack 即可。

  1. 0:000> !clrstack  
  2. OS Thread Id: 0x5a10 (0) 
  3.         Child SP               IP Call Site 
  4. 0000004d10dfde00 00007ffb889a10e4 [GCFrame: 0000004d10dfde00]  
  5. 0000004d10dfdf28 00007ffb889a10e4 [HelperMethodFrame_1OBJ: 0000004d10dfdf28] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object) 
  6. 0000004d10dfe040 00007ffb66920d64 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken) 
  7. 0000004d10dfe0d0 00007ffb6691b4bb System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken) 
  8. 0000004d10dfe140 00007ffb672601d1 System.Threading.Tasks.Task.InternalWait(Int32, System.Threading.CancellationToken) 
  9. 0000004d10dfe210 00007ffb6725cfa7 System.Threading.Tasks.Task`1[[System.__Canon, mscorlib]].GetResultCore(Boolean) 
  10. 0000004d10dfe250 00007ffb18172a1b WindowsFormsApp4.Form1.button1_Click(System.Object, System.EventArgs) [E:\net5\ConsoleApp1\WindowsFormsApp4\Form1.cs @ 26] 
  11. 0000004d10dfe2b0 00007ffb3a024747 System.Windows.Forms.Control.OnClick(System.EventArgs) 
  12. 0000004d10dfe2f0 00007ffb3a027b83 System.Windows.Forms.Button.OnClick(System.EventArgs) 
  13. 0000004d10dfe340 00007ffb3a837231 System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs) 
  14. 0000004d10dfe400 00007ffb3a7e097d System.Windows.Forms.Control.WmMouseUp(System.Windows.Forms.Message ByRef, System.Windows.Forms.MouseButtons, Int32) 
  15. 0000004d10dfe480 00007ffb3a0311cc System.Windows.Forms.Control.WndProc(System.Windows.Forms.Message ByRef) 
  16. 0000004d10dfe540 00007ffb3a0b0c97 System.Windows.Forms.ButtonBase.WndProc(System.Windows.Forms.Message ByRef) 
  17. 0000004d10dfe5c0 00007ffb3a0b0be5 System.Windows.Forms.Button.WndProc(System.Windows.Forms.Message ByRef) 
  18. 0000004d10dfe5f0 00007ffb3a030082 System.Windows.Forms.NativeWindow.Callback(IntPtr, Int32, IntPtr, IntPtr) 
  19. 0000004d10dfe690 00007ffb3a765a02 DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int32, Int64, Int64) 
  20. 0000004d10dfe9d0 00007ffb776d221e [InlinedCallFrame: 0000004d10dfe9d0] System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef) 
  21. 0000004d10dfe9d0 00007ffb3a0b9489 [InlinedCallFrame: 0000004d10dfe9d0] System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef) 
  22. 0000004d10dfe9a0 00007ffb3a0b9489 DomainBoundILStubClass.IL_STUB_PInvoke(MSG ByRef) 
  23. 0000004d10dfea60 00007ffb3a046661 System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32) 
  24. 0000004d10dfeb50 00007ffb3a045fc7 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext) 
  25. 0000004d10dfebf0 00007ffb3a045dc2 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext) 
  26. 0000004d10dfec50 00007ffb181708e2 WindowsFormsApp4.Program.Main() [E:\net5\ConsoleApp1\WindowsFormsApp4\Program.cs @ 19] 
  27. 0000004d10dfee78 00007ffb776d6923 [GCFrame: 0000004d10dfee78]  

從堆棧輸出看,主線程最后是卡在 Task.Result 下的 Monitor.ObjWait 上,也就是說它還沒有取到最后的 jsonString,這就很奇怪了,都好幾分鐘了,難道網絡出問題啦 ? 我這網可是100M火力全開。。。??????

2) jsonString 哪去了?

判斷是不是網絡的問題,有一個好辦法,那就是直接暴力搜索托管堆,如果在托管堆上發現了 jsonString,那就說明是程序上的某些地方讓 Result 遲遲得不到結束,用命令 !dumpheap -type String -min 8500 + !do 000001f19002fcf0 查看即可,如下圖所示:

從圖中可以清晰的看出 html 回來了,既然都回來了,為啥還沒讓 Task.Result 結束呢?下一步就是看一看這個 html 被誰持有,使用 !gcroot 即可。

  1. 0:000> !gcroot 000001f19002fcf0 
  2. Thread 5a10: 
  3.     0000004d10dfe250 00007ffb18172a1b WindowsFormsApp4.Form1.button1_Click(System.Object, System.EventArgs) [E:\net5\ConsoleApp1\WindowsFormsApp4\Form1.cs @ 26] 
  4.         rbp+10: 0000004d10dfe2b0 
  5.             ->  000001f180007f78 WindowsFormsApp4.Form1 
  6.             ->  000001f180070d68 System.ComponentModel.EventHandlerList 
  7.             ->  000001f180071718 System.ComponentModel.EventHandlerList+ListEntry 
  8.             ->  000001f1800716d8 System.EventHandler 
  9.             ->  000001f1800716b0 System.Windows.Forms.ApplicationContext 
  10.             ->  000001f180071780 System.EventHandler 
  11.             ->  000001f18006ab38 System.Windows.Forms.Application+ThreadContext 
  12.             ->  000001f18006b140 System.Windows.Forms.Application+MarshalingControl 
  13.             ->  000001f18016c9c8 System.Collections.Queue 
  14.             ->  000001f18016ca00 System.Object[] 
  15.             ->  000001f18016c948 System.Windows.Forms.Control+ThreadMethodEntry 
  16.             ->  000001f18016c8b8 System.Object[] 
  17.             ->  000001f1800e6f80 System.Action 
  18.             ->  000001f1800e6f60 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner 
  19.             ->  000001f1800a77d0 WindowsFormsApp4.Form1+<GetJsonAsync>d__2 
  20.             ->  000001f1800b4e50 System.Threading.Tasks.Task`1[[System.String, mscorlib]] 
  21.             ->  000001f19002fcf0 System.String 
  22.  
  23. Found 1 unique roots (run '!GCRoot -all' to see all roots). 

從輸出結果看,這個 System.String 最后被 5a10 線程的 WindowsFormsApp4.Form1 持有,可以用 !t 驗證一下 5a10 到底是什么線程。

  1. 0:000> !t                                                                                                        Lock   
  2.        ID OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception 
  3.    0    1 5a10 000001f1f1b01200  2026020 Preemptive  000001F1800E70E8:000001F1800E7FD0 000001f1f1ad5b90 0     STA  
  4.    2    2 712c 000001f1f1b2a270    2b220 Preemptive  0000000000000000:0000000000000000 000001f1f1ad5b90 0     MTA (Finalizer)  

我去,5a10 竟然是主線程,真的有點混亂,主線程被卡死,string 又被主線程持有,完全是莫名其妙。

3) 尋找突破點

還是回過頭下冷靜思考下這條 引用鏈,我發現這里有一個 Queue:-> 000001f18016c9c8 System.Collections.Queue,有思路了,我可以在入 Queue 的地方下個 斷點 來調試下源代碼,工具用 DnSpy, 說干就干。

從圖中可以看到,當前入Queue時,用的是線程 10,也就是說此時 string 還沒被主線程持有,再仔細分析下這個調用棧,我想你應該就搞清楚了,反正我看完之后腦子中就有了這張圖。

從圖中可以發現,延續的 Task 最后被 WindowsFormsSynchronizationContext.Post 調度到了 Control 下的 Queue 中,而這 Queue 中的數據需要 UI線程 去執行,所以就有了下面的對話:

主線程: task小弟,你什么時候執行完呀,我在等你信號呢?

task: 老哥,我已在你家啦,你什么時候過來接我呀?

總而言之:task需要主線程來執行它,主線程卻在傻傻的等待 task 的 complete 狀態,所以延續的task永遠得不到執行,這就出現了很尷尬的場面,不知道你明白了嗎? ??????

三、破解之法

知道了前因后果,這破解之法就簡單了,大體上分兩種。

1. 禁止將 延續task 丟到 Queue 中

要切斷這條路,言外之意就是讓線程池自己結束這個 task,這樣 UI線程 就能感知到這個task已完成,最終 UI線程 就能獲取最后的 html,做法就是在 await 后加上 ConfigureAwait(false) , 參考如下:

2. 禁止阻塞主線程

如果不阻塞主線程,那么主線程就可以自由的在 Control.Queue 中獲取需要執行的任務,改法也很簡單,只需要在 GetJsonAsync 前加上 await 即可。

四、總結

結論就是多自己實操實操,理論知識是別人強制灌輸給你的,到底對還是不對,其實你自己心里也沒底,實操驗證才是真正屬于你的,而且也很難忘記,畢竟你曾今真的體驗過,實操過,驗證過。

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2011-03-28 15:48:52

批量數據綁定

2011-03-24 10:24:45

批量數據綁定

2012-02-09 09:41:22

2023-11-06 08:31:58

業務代碼多線程

2019-11-15 18:00:18

MySQLSQL數據庫

2009-03-10 18:10:12

LinuxUbuntu技巧

2013-03-22 10:53:42

PyConPython

2011-06-13 09:25:01

斷號

2015-08-03 10:21:04

設計模式表達

2020-11-27 09:57:11

Python代碼PyPy

2022-08-01 10:01:11

JavaScript語言代碼庫

2021-12-17 08:55:26

Python微博機器人

2013-05-10 10:56:09

2023-09-05 23:34:52

Kubernetes云原生

2023-07-12 08:01:28

FOADMROADMOXC

2025-10-22 08:11:27

2025-03-13 11:09:47

2025-07-10 14:45:45

大模型模型GPT-4o

2016-09-12 15:26:06

戴爾

2021-06-30 00:14:24

JS代碼數組
點贊
收藏

51CTO技術棧公眾號

97aⅴ精品视频一二三区| 日韩电影免费观看高清完整版在线观看| 亚洲尤物精选| 欧美高清视频在线高清观看mv色露露十八 | 欧美一级片久久久久久久| 欧美成人手机在线视频| 国产一二三区在线| 亚洲国产影院| 日韩欧美一区二区免费| 亚洲一区二区三区欧美| 日日夜夜狠狠操| 开心激情综合| 亚洲午夜精品网| 91视频最新| 18岁成人毛片| av一级久久| 国产精品久久久久久亚洲毛片 | 色妞欧美日韩在线| 中文字幕永久视频| 精品一二三区视频| 麻豆精品网站| 亚洲毛茸茸少妇高潮呻吟| 久久av综合网| 欧美一级淫片免费视频魅影视频| 自拍视频亚洲| 欧美一区二区三区视频| 中文字幕久久一区| 91久久精品国产91性色69| 成人影视亚洲图片在线| 在线观看一区日韩| 少妇免费毛片久久久久久久久| 国产又粗又爽视频| 婷婷综合福利| 欧美性生交xxxxxdddd| 欧美激情专区| 久久人人爽人人爽人人片av免费| 亚洲成在人线免费观看| 精品久久久一区二区| 蜜桃av噜噜一区二区三区| 麻豆精品久久久久久久99蜜桃| 要久久电视剧全集免费| 91高清视频免费看| 亚洲成人第一| 一本色道久久综合精品婷婷| 999视频精品| 91精品国产91久久久久久一区二区| 中文字幕中文字幕在线中心一区| 国产一区二区在线视频聊天| 一区二区三区在线电影| 精品国产乱码久久久久久免费| 日韩精品在线中文字幕| 天天摸夜夜添狠狠添婷婷| 久久久久在线| 日韩在线观看免费高清| 波多野结衣中文字幕在线播放| 欧美aaaaaaa| 2020国产精品| 国产日本欧美一区| 久操免费在线视频| 中文字幕av一区二区三区人| 精品视频资源站| 男女啪啪免费观看| 隣の若妻さん波多野结衣| 久久激情视频| 久久国产精品久久国产精品| 精品国产一区在线| 欧美大陆国产| 亚洲成人av在线电影| 日韩欧美一区二区在线观看| 国产人妖一区二区三区| 亚洲视频二区| 久久av中文字幕| a级一a一级在线观看| 成人免费黄色| 午夜精品在线视频一区| 亚洲人成人77777线观看| 黄色一级大片在线免费看国产| 日韩va亚洲va欧美va久久| 欧美老女人性生活| 国产精成人品免费观看| 97久久亚洲| 欧美怡红院视频| 日韩在线综合网| h片在线免费观看| 国产午夜精品在线观看| 国产超碰91| 亚洲自拍偷拍另类| 玖玖玖国产精品| 欧美肥老妇视频| 三级黄色片在线观看| 日韩有码一区| 欧美大片免费久久精品三p| 亚洲最大成人在线观看| 国产免费拔擦拔擦8x高清在线人| 亚洲欧美偷拍卡通变态| 性欧美.com| 免费看男男www网站入口在线| 国产.精品.日韩.另类.中文.在线.播放| 国产精品黄色av| 成人毛片18女人毛片| 欧美日韩一区二区三区四区在线观看| 中文字幕成人在线| 亚洲成人网在线播放| 另类ts人妖一区二区三区| 日韩三级高清在线| 99久久99精品| 亚洲成a人片777777久久| 91久久免费观看| 男人亚洲天堂网| 在线观看爽视频| 狠狠躁夜夜躁人人躁婷婷91| 人妻av无码专区| 欧美人与性动交α欧美精品济南到 | 欧美男女性生活在线直播观看| 日韩av一二三四| 男人天堂视频在线观看| 亚洲18色成人| 男人日女人视频网站| 91资源在线观看| 成人免费在线视频观看| 日本一区二区免费高清视频| 毛片在线播放a| 中文字幕在线不卡一区| 在线观看欧美一区| caopon在线免费视频| 亚洲精品成人天堂一二三| 中文字幕精品在线播放| 超碰最新在线| 亚洲成人tv网| 日韩av在线综合| 欧美xnxx| 欧美精品久久一区| 宇都宫紫苑在线播放| 亚洲va欧美va人人爽成人影院| 日韩欧美一区电影| 免费观看污网站| 天堂成人娱乐在线视频免费播放网站 | 久久久久国产精品一区| 午夜影院在线看| 久久久久国产精品一区三寸| 国产精品入口福利| 国产精品爽爽久久久久久| 国产精品1区二区.| 91免费看蜜桃| 天堂av在线资源| 国产精品天美传媒沈樵| 国产日产欧美一区二区| 蜜桃视频动漫在线播放| 在线免费观看日本欧美| 中文字幕视频三区| 成人h动漫免费观看网站| 亚洲欧美中文另类| www.av免费| 亚洲国产1区| 国产精品成人一区二区| av网站免费播放| 2014亚洲片线观看视频免费| 中文字幕一区二区三区最新 | 不卡的一区二区| 一道在线中文一区二区三区| 日韩在线观看免费av| 日本少妇性生活| 久久精品国产99久久6| 国产精品国产精品| av在线女优影院| 亚州成人在线电影| 久久久久久久高清| 欧美理伦片在线播放| 日韩中文字幕视频| 亚洲天堂一区在线观看| 国产一区二区三区四| 欧美三日本三级少妇三99| 在线观看电影av| 在线观看免费成人| 丰满岳乱妇一区二区| 日本欧美视频| 97久久超碰福利国产精品…| 最新黄色网址在线观看| 成人免费黄色大片| 亚洲第一页在线视频| 女人让男人操自己视频在线观看 | 精品动漫一区二区| 婷婷激情综合五月天| 九九视频免费观看视频精品 | 久久久久久久久久久97| 免费看黄色91| 欧美大香线蕉线伊人久久| 在线电影福利片| 欧美日韩久久久一区| 在线免费观看麻豆| 亚洲激情二区| 99在线影院| 麻豆视频网站在线观看| 欧美曰成人黄网| 91精品国产自产| 91久久综合| 国产精品区免费视频| 亚洲综合伊人久久大杳蕉| 欧美日韩精品一区二区| 成人在线观看免费高清| 久久性色av| 农村寡妇一区二区三区| 国产三级电影在线播放| 精品成人一区二区| 国产一级在线视频| 粉嫩嫩av羞羞动漫久久久| 中文字幕在线中文字幕日亚韩一区| 成人免费福利| 亚洲免费影视第一页| 天天操天天操天天操天天| caoporen国产精品视频| 国产一区二区四区| 亚洲午夜免费| 欧美黑人巨大精品一区二区| 国产高清免费av| 一区二区三区国产豹纹内裤在线| 麻豆传媒在线看| 欧美精品色网| 国产伦精品一区二区三区在线 | 亚洲一区二区三区久久| 成码无人av片在线观看网站| 欧美成人综合网站| 精品无码久久久久久久久| 高清国产午夜精品久久久久久| 大胆欧美熟妇xx| 激情小说亚洲图片| 日本高清视频一区| 成人欧美亚洲| 911精品产国品一二三产区 | 激情亚洲一区二区三区四区| 插我舔内射18免费视频| 欧美一级一区| 亚洲欧洲久久| 免费精品一区二区三区在线观看| 欧美日韩高清在线观看| 欧美 日韩 国产 成人 在线 91| 亚洲一区二三区| 少妇毛片一区二区三区| 日韩1区2区日韩1区2区| 久久视频免费在线| 欧美人体视频| 国产精品丝袜久久久久久高清| 老司机精品影院| 精品国产凹凸成av人导航| 国产精品500部| 国产欧美精品一区aⅴ影院 | 四虎成人精品一区二区免费网站| 久久成人av网站| 亚洲欧美一区二区三| 午夜精品久久久| 国产又粗又黄又猛| 国产精品 日产精品 欧美精品| 欧美久久久久久久久久久久久| 精品一区二区三| 亚洲影视中文字幕| 最新日韩精品| 另类少妇人与禽zozz0性伦| 四虎精品一区二区三区| 欧美网站大全在线观看| 国产亚洲精品成人| 中文字幕av一区二区三区高| 亚洲国产精品第一页| 三级欧美在线一区| 无码人妻精品一区二区蜜桃百度| 小说区图片区色综合区| 91久久久在线| 亚洲成人激情社区| 午夜精品理论片| 欧美一区二区三区| 国产婷婷色综合av蜜臀av | 国产一区二区三区日韩| 日日摸日日碰夜夜爽av| 一精品久久久| 亚洲狠狠婷婷综合久久久| 国产精品xxxav免费视频| 国产精品欧美一区二区| 白浆视频在线观看| 久久久国产成人精品| 国模吧精品人体gogo| 精品国产污网站| 国产精品丝袜黑色高跟鞋| 91久久精品国产91性色tv| 日本少妇久久久| 亚洲女子a中天字幕| 一二三四在线观看视频| 91原创在线视频| jjzz黄色片| 国产福利91精品一区| www.超碰97.com| 麻豆精品91| 欧美不卡在线播放| 伊人久久亚洲热| 欧美国产视频一区| 91精品国产91久久久久久密臀 | aaa黄色大片| 极品美女销魂一区二区三区| 亚洲成人av免费看| 久久一区欧美| 干日本少妇首页| 亚洲精品视频啊美女在线直播| 超碰人人爱人人| 一级毛片免费高清中文字幕久久网| 一区二区三区视频在线播放| 国产探花在线精品一区二区| 看高清中日韩色视频| 开心激情综合| 美国av一区二区三区| 日韩av影院| 蜜桃久久精品乱码一区二区| 日韩福利视频一区| 久久久久久久久久久久久久久久av| 高清欧美性猛交xxxx黑人猛| 国产精品免费一区二区三区四区 | 久久精品国产一区二区三区免费看| 免费涩涩18网站入口| 日韩在线播放一区二区| 麻豆av免费在线| 日韩精品久久久久久| 国产免费视频传媒| 蜜臀av一区二区| 五月天婷婷在线观看视频| 狠狠色狠狠色综合| 视频区 图片区 小说区| 国产毛片精品一区| 久久免费精品国产| 99精品1区2区| 西西444www无码大胆| 国产精品每日更新在线播放网址| 福利视频第一页| 一区二区三区精品视频在线| 日本视频免费在线| 色婷婷av一区二区| 在线观看日批视频| 欧美成va人片在线观看| 午夜性色福利影院| 亚洲欧美中文日韩v在线观看| 国产小视频免费观看| 亚洲精品suv精品一区二区| 免费黄色在线视频网站| 日韩在线视频播放| 免费av在线网址| 久久久久国产精品免费| 香蕉成人av| 91久久久亚洲精品| 日韩中文av| 亚洲欧美日韩另类精品一区二区三区 | 伊人一区二区三区久久精品| 久草免费在线观看| 26uuu亚洲伊人春色| 成人在线免费av| 国产精品99久久久久久久| 色狠狠久久av综合| 亚洲图片欧洲图片日韩av| 欧美另类女人| 日本www.色| 国产成人aaa| 成人无码av片在线观看| 一区二区三区国产精品| 超碰在线观看91| 国产一卡二卡三卡| 日韩精品一区二区三区视频在线观看 | 自拍偷拍亚洲视频| **亚洲第一综合导航网站| 日韩精品丝袜美腿| 乱子伦一区二区| 日韩av中文在线观看| 香蕉久久久久久av成人| 欧美激情一区在线观看| 国产精品6666| 555夜色666亚洲国产免| 韩国中文免费在线视频| 久久人人爽人人爽人人片av高请 | 超碰免费在线播放| 国产精品久久久| 欧美变态网站| 国内精品国产三级国产99| 免费黄网站欧美| 中文人妻一区二区三区| 一区二区三区国产| 91禁在线观看| 亚洲一二三在线| 123区在线| 99在线看视频| 亚洲色图网站| 亚洲xxx在线观看| 久久久精品欧美丰满| 日本一级片免费看| 777久久久精品| 尤物视频在线免费观看| 国产成人av在线| 亚洲丁香日韩| 欧美 日本 亚洲| 成人自拍视频在线| 激情五月婷婷小说| 9191精品国产综合久久久久久| av在线资源网| 国产精品网站入口| 欧美精品一区二区三区精品| 国产在线观看福利| 久久先锋资源网|