簡體   English   中英

在.Net中睡眠與等待有什么區別

[英]What is the difference between Sleep vs Wait in .Net

在我最近的一次采訪中,有人問我關於睡眠與等待的問題。 如果我理解正確,那么睡眠屬於線程,等待與任務有關。 所以,我分別解釋了他們兩個而不是比較。 但面試官並不高興。 他說兩者都可以做幾件事,因此需要進行比較來決定在哪種情況下使用哪個更好。 此外,他期待這兩個在獲取鎖定時的行為。 簡而言之,經過我們的討論,我有兩個基本問題:

  1. 我們真的可以在 .Net 的上下文中比較 Sleep 和 Wait 嗎? 如果是,那么要點是什么?
  2. 假設他們已經獲得了一些鎖,然后我們休眠或等待,那么鎖會發生什么,它會被釋放嗎? (不確定這種情況是否實用)

上述陳述可能令人困惑,因為我對他所說/期望的內容感到困惑,但我試圖寫下我們討論的任何內容。 因此,如果有人分享他們對上述令人困惑的情況的知識,我將不勝感激。

我們真的可以在 .Net 的上下文中比較 Sleep 和 Wait 嗎? 如果是,那么要點是什么?

是的。 這些似乎是相似的機制,但它們有很大不同,並且旨在用於不同的目的。 主要區別在於:

  • Task.Wait()在任務上調用(所以基本上是在對象上) - Thread.Sleep()在特定線程上調用。
  • Task.Wait()用於等待設置超時的任務結果。 如果任務沒有在指定的時間范圍內完成,則繼續執行並且方法返回false - Thread.Sleep()用於凍結線程執行(使其活動與其他線程同步)。 如果它被中斷,則會引發異常,如果它被忽略,則線程將停止。
  • 這兩種機制都可以中斷。 Thread.Sleep()可以被Thread.Interrupt()Thread.Abort()喚醒 - Task.Wait()可以被任務取消或其異常中斷。

資料來源:

線程.睡眠

任務.等待

線程.中斷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM