C# 異步與Windows應(yīng)用程序
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在Task上一起使用Wait和async關(guān)鍵字是很危險(xiǎn)的。在使用同步化上下文的應(yīng)用程序中,這很容易導(dǎo)致死鎖。 在按鈕點(diǎn)擊事件中,調(diào)用本地函數(shù)DelayAsync。DelayAsync等待Task.Delay的完成,之后在前臺(tái)線程中繼續(xù)執(zhí)行。但是,調(diào)用者在DelayAsync返回的任務(wù)上調(diào)用Wait()方法。Wait()方法阻塞調(diào)用線程,直到任務(wù)完成。在這種情況下,Wait()是從前臺(tái)線程上調(diào)用的,因此Wait()會(huì)阻塞前臺(tái)線程。Task.Delay上的Wait()永遠(yuǎn)無(wú)法完成,因?yàn)榍芭_(tái)線程不可用。這是一個(gè)經(jīng)典的死鎖場(chǎng)景: 但你可以修改上下文,這樣就不會(huì)發(fā)生死鎖情況: 在UI中使用異步時(shí),不建議使用Wait,建議像“演示一” 使用異步。 閱讀原文:原文鏈接 該文章在 2025/2/13 8:44:10 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |